如何在不丢失对导航栏的访问的情况下更改视图控制器中辅助功能元素的顺序?

时间:2019-04-12 20:11:08

标签: ios voiceover uiaccessibility

我有一个视图控制器,其中包含一个表格视图以及一些“浮动”控件,这些控件直观地显示在屏幕底部。

使用VoiceOver导航时,用户进行如下导航更有意义:

  • 后退按钮(导航栏)
  • 标题(导航栏)
  • 编辑按钮(导航栏)
  • 浮动按钮
  • 表内容

但目前,导航顺序为

  • 后退按钮(导航栏)
  • 标题(导航栏)
  • 编辑按钮(导航栏)
  • 表内容
  • 浮动按钮

当我为视图控制器的视图显式设置可访问性元素以更改顺序时,例如

- (void)viewDidLoad {
  self.accessibilityElements = @[self.floatingButton, self.tableView];
}

导航顺序变为

  • 浮动按钮
  • 表内容

并且导航栏不再可用。

如果我在self.navigationController.navigationBar数组的开头包含accessibilityElements,那么我会得到导航顺序

  • 后退按钮(导航栏)
  • 标题(导航栏)
  • 编辑按钮(导航栏)

然后再次向右轻扫将导航回到“后退”按钮,因此我无法到达浮动按钮或表格内容。

是否可以在不失去对导航栏访问的情况下重新排序可访问子视图?

1 个答案:

答案 0 :(得分:1)

在此故事板之后,我尝试并重现了您在空白项目中提到的问题: enter image description here 我阅读了此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以获得下一个元素,并获得了以下插图: enter image description here enter image description here VoiceOver导航遵循所需的模式:

  1. 返回按钮(导航栏)
  2. 标题(导航栏)
  3. 编辑按钮(导航栏)
  4. 浮动按钮。
  5. 表内容。

我没有特别说明,并且在不丢失对导航栏的访问权限的情况下更改了视图控制器中辅助功能元素的顺序。