Ios 如何更改视图控制器中辅助功能元素的顺序而不丢失对导航栏的访问权限?
我有一个视图控制器,它包含一个表视图以及一些“浮动”控件,这些控件直观地显示在屏幕底部 当使用VoiceOver导航时,用户可以像这样导航:Ios 如何更改视图控制器中辅助功能元素的顺序而不丢失对导航栏的访问权限?,ios,voiceover,uiaccessibility,Ios,Voiceover,Uiaccessibility,我有一个视图控制器,它包含一个表视图以及一些“浮动”控件,这些控件直观地显示在屏幕底部 当使用VoiceOver导航时,用户可以像这样导航: 后退按钮(导航栏) 标题(导航栏) 编辑按钮(导航栏) 浮动按钮 目录 但目前,导航顺序是 后退按钮(导航栏) 标题(导航栏) 编辑按钮(导航栏) 目录 浮动按钮 当我显式设置视图控制器视图的可访问性元素以更改顺序时,如下所示 -(void)viewDidLoad{ self.accessibilityElements=@[self.floatin
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- 浮动按钮
- 目录
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- 目录
- 浮动按钮
-(void)viewDidLoad{
self.accessibilityElements=@[self.floatingButton,self.tableView];
}
导航命令变为
- 浮动按钮
- 目录
accessibilityElements
数组的开头包含self.navigationController.navigationBar
,那么我将获得导航顺序
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
有没有一种方法可以在不丢失对导航栏的访问权限的情况下对可访问的子视图进行重新排序?我尝试并重现了您在以下故事板的空白项目中提到的问题: 我阅读本文是为了提供我实现的代码片段,以使其按预期工作:
class TestButtonTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var myTableView: UITableView!
@IBOutlet weak var bottomButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
myTableView.delegate = self as UITableViewDelegate
myTableView.dataSource = self as UITableViewDataSource
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.accessibilityElements = [bottomButton, myTableView]
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return zeCell = tableView.dequeueReusableCell(withIdentifier: "myPersoCell",
for: indexPath)
}
}
我制作了以下元素,并获得了以下插图:
画外音导航遵循所需的模式:
我没有特别指定任何内容,并且更改了视图控制器中可访问性元素的顺序,而不会丢失对导航栏的访问权限。此应用程序有一个复杂的自定义导航控制器系统,可能会干扰该行为。感谢您在一个更简单的应用程序中验证该行为。当我遵循这种模式时,导航看起来几乎正常工作。焦点从我的浮动按钮开始,一开始我不能向左轻弹来选择导航栏,但是如果我向右轻弹来选择表格,然后向左轻弹几次它确实选择了导航栏。正在调查是否可以使用
UIAccessibilityPostNotification
最初选择导航栏。@格雷格:如果您注意到当前导航栏受到干扰,您可以为画外音隐藏它,并创建可访问性元素以添加到可访问性元素数组中,以便根据需要对整个页面进行排序,例如。。。这不是一个简单的方法,但如果需要的话,这可能会有所帮助。我还没有找到一个好的解决办法。我希望,我们将能够删除自定义导航控制器系统在未来,这将解决这个问题。