如何在不失去对导航栏的访问权限的情况下更改视图控制器中可访问性元素的顺序?
How can I change the order of accessibility elements in a view controller without losing access to the navigation bar?
我有一个视图控制器,其中包含一个 table 视图以及一些 "floating" 控件,它们直观地显示在屏幕底部。
当使用 VoiceOver 导航时,用户像这样导航会更有意义:
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- 浮动按钮
- table 内容
但目前,导航顺序是
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- table 内容
- 浮动按钮
当我为我的视图控制器的视图显式设置可访问性元素以更改顺序时,如
- (void)viewDidLoad {
self.accessibilityElements = @[self.floatingButton, self.tableView];
}
导航顺序变为
- 浮动按钮
- table 内容
并且无法再访问导航栏。
如果我在 accessibilityElements
数组的开头包含 self.navigationController.navigationBar
,那么我会得到导航顺序
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
再次向右滑动会导航回后退按钮,所以我无法到达浮动按钮或 table 内容。
有没有办法在不失去对导航栏的访问权限的情况下重新排序可访问的子视图?
我尝试并重现了您在这个故事板之后的空白项目中提到的问题:
我阅读此 a11y recommendations site 以提供我实现的代码片段以使其按预期工作:
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)
}
}
我做了right flicks来获取下一个元素并获得了下面的插图:
VoiceOver 导航遵循所需的模式:
- 后退按钮(导航栏).
- 标题(导航栏).
- 编辑按钮(导航栏).
- 浮动按钮。
- Table 内容。
我没有特别指定任何内容,更改了视图控制器中可访问性元素的顺序而没有失去对导航栏的访问权限。
我有一个视图控制器,其中包含一个 table 视图以及一些 "floating" 控件,它们直观地显示在屏幕底部。
当使用 VoiceOver 导航时,用户像这样导航会更有意义:
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- 浮动按钮
- table 内容
但目前,导航顺序是
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
- table 内容
- 浮动按钮
当我为我的视图控制器的视图显式设置可访问性元素以更改顺序时,如
- (void)viewDidLoad {
self.accessibilityElements = @[self.floatingButton, self.tableView];
}
导航顺序变为
- 浮动按钮
- table 内容
并且无法再访问导航栏。
如果我在 accessibilityElements
数组的开头包含 self.navigationController.navigationBar
,那么我会得到导航顺序
- 后退按钮(导航栏)
- 标题(导航栏)
- 编辑按钮(导航栏)
再次向右滑动会导航回后退按钮,所以我无法到达浮动按钮或 table 内容。
有没有办法在不失去对导航栏的访问权限的情况下重新排序可访问的子视图?
我尝试并重现了您在这个故事板之后的空白项目中提到的问题:
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)
}
}
我做了right flicks来获取下一个元素并获得了下面的插图:
- 后退按钮(导航栏).
- 标题(导航栏).
- 编辑按钮(导航栏).
- 浮动按钮。
- Table 内容。
我没有特别指定任何内容,更改了视图控制器中可访问性元素的顺序而没有失去对导航栏的访问权限。