UISearchController 可访问

UISearchController in-accessible

我已经使用 UISearchController 和 table 视图实现了一个搜索屏幕。当我开始搜索某些内容时,搜索控制器会在 table 视图之上添加一个视图(尽管它什么都不做),直到我设置 searchController.active = false,table 视图无法通过 VoiceOver 访问。我已经尝试了几乎所有看起来的东西,唯一的解决办法是放弃 UISearchController 换成 UISearchBar。目前,一旦显示键盘且搜索控制器处于活动状态,VoiceOver 选择器将从文本字段转到栏按钮项,然后跳过 table 视图并转到键盘。这是我的 UISearchController 设置。

searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.delegate = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.searchBarStyle = .Minimal
    searchController.searchBar.keyboardAppearance = .Dark
    searchController.searchBar.showsCancelButton = false
    searchController.searchBar.delegate = self
    searchController.searchBar.text = prefilledSearch
    searchController.view.layer.borderColor = UIColor.redColor().CGColor
    searchController.view.layer.borderWidth = 1.0
    searchController.view.isAccessibilityElement = false
    searchController.view.hidden = true
    searchController.searchBar.setShowsCancelButton(false, animated: false)

如何解决这个问题并继续使用 UISearchController?目前,我的应用中的 VoiceOver 用户无法使用搜索。

根据我在此页面上的发现,http://www.iaccessibility.net/report/uisearching-for-accessibility-nil,问题是您将 searchResultsController 设置为 nil,这使得原始视图控制器显示搜索结果。当搜索控制器获得焦点时,它会阻止 VoiceOver 访问原始视图控制器中的搜索结果。通过指定一个单独的结果视图控制器,VoiceOver 将工作。

那是因为基础 UITransitionViewaccessibilityViewIsModalSelector 设置了不正确的值,它在搜索视图中捕获了 VO,在您的情况下是空的。

我只能考虑通过在私有 UITransitionView 上调配 accessibilityViewIsModal 来修补此行为。

我在博客中描述了该技术 post 我写道: http://www.morphineapps.com/blog/accessibility-on-ios

相关要点:

https://gist.github.com/pronebird/0d3c06485de50e100d1e93bcde08c94c#file-snippet-m https://gist.github.com/pronebird/66aa70b005ed9af8d357cdc7e940542b#file-search-controller-snippet-m

我发现接受的答案不是最优的,即使它在技术上可能是正确的。

如果您使用 obscuresBackgroundDuringPresentation(在 iOS 9.1 中添加)并将其设置为 false,VoiceOver 可以访问基础 table 视图。

用法:

searchController.obscuresBackgroundDuringPresentation = false