可访问性:专注于视图

Posted

技术标签:

【中文标题】可访问性:专注于视图【英文标题】:Accessibility: focus on a view 【发布时间】:2019-11-04 20:41:08 【问题描述】:

在我的应用程序中(盲人用户必须可以访问)我有这种情况(这是一个语法练习)

当我在打开 VoiceOver 的设备上尝试它时,首先它会关注句子的第一部分,所以在这种情况下,它会显示“Kesha”,当我向右滑动阅读下一部分时,它会显示句子的第二部分句子“合同因为……”。我想要的是让它在阅读句子的第二部分之前也关注灰色框(即UIViewelement),以便用户知道该空框在句子中的位置,但我不知道不知道该怎么做。

我已经尝试过grayBox.accessibilityLabel = "empty box"grayBox.accessibilityHint = "empty box",但它只是没有将焦点放在那个视图上而且它不会说话。我还尝试在盒子里放一个空的UILabel,但我在以正确的顺序定位它时遇到了一些问题,我认为这不是正确的做法。有什么建议吗?

【问题讨论】:

如果您想按照自己的意愿重新排列 VoiceOver 读出的视图,我建议您查看a11y-guidelines.orange.com/mobile_EN/dev-ios.html#reading-order,这可能会有所帮助。 【参考方案1】:

在您想要“接收焦点”的UIView 上,您只需启用可访问性或将其标记为可访问元素,例如:

myGreyView.isAccessibilityElement = true
myGreyView.accessibilityLabel = "A grey box"
myGreyView.accessibilityHint = "this is a secretive box. I don't know what it does"

您还可以在 xcode 界面生成器“启用辅助功能”中的 UIView 属性中勾选一个框,我认为它被调用了。这还可以让您设置标签和提示。

欲了解更多信息,请参阅Apple guide to VoiceOver

【讨论】:

在这里我想念什么谢谢,关于如何设置“焦点”的正确顺序有什么想法吗?因为现在阅读的第一件事就是那个空盒子,而不是句子的第一部分 对不起,我不确定如何设置订单,可能需要阅读该指南【参考方案2】:

关于被读出的元素的顺序。第一部分和第二部分是不同的 UILabel 还是一个标签?

您是在代码中还是在 Xib/Storyboard 中添加这些?根据添加为子视图的顺序,可以影响 VoiceOver 读出项目的顺序。

添加 3x UI 元素时,请按以下顺序添加它们。

    UILabel - “Kesha” UIView - 灰盒,“灰盒” UILabel - “合同不公平。”

如果您已通过界面构建​​器(Xib/Storyboard)添加它们,请确保视图层次结构中的顺序正确。

如果失败,您可以尝试覆盖方法“accessibilityElements”并按照您希望它们读出的顺序返回标签和灰色视图的数组。

【讨论】:

我以编程方式添加它们,我添加子视图的顺序似乎不会影响它们被读取的顺序。我的应用程序的另一部分也有同样的问题,我在其中显示了一个包含 2 个标签和一个按钮的弹出视图。通过命令 'UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: self.popupLabel)' 我可以将焦点设置在弹出视图的第一个标签上,但不是使用可访问性手势(滑动)应该读取下一个标签,然后是按钮,它会读取背景上的元素

以上是关于可访问性:专注于视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在键盘可访问性焦点上关闭汉堡菜单

如何在键盘可访问性焦点上关闭汉堡菜单

UIStackView 可访问性 - 在默认的可访问元素中插入可访问性视图?

角度 5 中动态元素的可访问性

Android - TalkBack 可访问性侧重于 Recyclerview 中的滑动删除按钮

自定义 UITableViewCell 可访问性