Uitableview UISearchController在可访问的
我使用UISearchController和表视图实现了一个搜索屏幕。当我开始搜索某个内容时,搜索控制器会在表视图的顶部添加一个视图(尽管它什么也不做),直到我将searchController.active设置为false,表视图才可以通过VoiceOver访问。我已经尝试了几乎所有的方法,唯一的解决办法是放弃UISearchController,转而使用UISearchBar。当前,一旦显示键盘且搜索控制器处于活动状态,VoiceOver选择器将从文本字段转到一个条形按钮项,然后跳过表格视图并转到键盘。这是我的UISearchController设置Uitableview UISearchController在可访问的,uitableview,accessibility,uisearchcontroller,voiceover,Uitableview,Accessibility,Uisearchcontroller,Voiceover,我使用UISearchController和表视图实现了一个搜索屏幕。当我开始搜索某个内容时,搜索控制器会在表视图的顶部添加一个视图(尽管它什么也不做),直到我将searchController.active设置为false,表视图才可以通过VoiceOver访问。我已经尝试了几乎所有的方法,唯一的解决办法是放弃UISearchController,转而使用UISearchBar。当前,一旦显示键盘且搜索控制器处于活动状态,VoiceOver选择器将从文本字段转到一个条形按钮项,然后跳过表格视图
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用户无法使用搜索功能。根据我在本页上的发现,问题是您将searchResultsController设置为nil,这会使原始视图控制器显示搜索结果。当搜索控制器具有焦点时,它会阻止VoiceOver访问原始视图控制器中的搜索结果。通过指定一个单独的结果视图控制器,VoiceOver将起作用。这是因为底层的
UITransitionView
为AccessibilityViewModalSelector
设置了不正确的值,该值会在搜索视图中捕获VO,在您的情况下,该视图为空
我只能通过在privateUITransitionView
上滑动accessibilityViewIsModal
来修补此行为
我在一篇博客文章中描述了这项技术:
相关GIST:
我发现被接受的答案是次优的,尽管它在技术上可能是正确的 如果您在演示过程中使用
模糊背景
(在iOS 9.1中添加)并将其设置为假
,VoiceOver可以访问基础表视图
用法:
searchController.obscuresBackgroundDuringPresentation = false
在Swift中,您可以执行
func didPresentSearchController(searchController:UISearchController){searchController.view.superview?.accessibilityViewIsModal=false}
@Maximilian发布此答案时,这对我不起作用。