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 将工作。
那是因为基础 UITransitionView
为 accessibilityViewIsModalSelector
设置了不正确的值,它在搜索视图中捕获了 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
我已经使用 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 将工作。
那是因为基础 UITransitionView
为 accessibilityViewIsModalSelector
设置了不正确的值,它在搜索视图中捕获了 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