辅助功能:专注于一个视图

Accessibility: focus on a view

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

当我在打开 VoiceOver 的设备上尝试它时,首先它会专注于句子的第一部分,因此在这种情况下它会显示 "Kesha",当我向右滑动以阅读下一部分时它会显示句子的第二部分"the contract because..."。我想要的是让它在阅读句子的第二部分之前也关注灰色框(即 UIView 元素),以便用户知道句子中那个空框的位置,但我不知道该怎么做。

我已经尝试过 grayBox.accessibilityLabel = "empty box"grayBox.accessibilityHint = "empty box",但它只是没有将焦点放在该视图上,也没有说话。我还尝试在框中放置一个空的 UILabel,但我在按正确的顺序定位它时遇到了一些问题,我认为这不是正确的方法。有什么建议吗?

在您想要 'receive focus' 的 UIView 上,您只需启用可访问性或将其标记为可访问元素,例如:

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

您还可以在 xcode 界面生成器 "Accessibility Enabled" 中的 UIView 属性中勾选一个框,我认为它已调用。它还允许您设置标签和提示。

有关详细信息,请参阅此 Apple guide to VoiceOver

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

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

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

  1. UI标签 - "Kesha"
  2. UI视图 - 灰框,"A grey box"
  3. UI标签 - "the contract because it was not fair."

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

如果失败,您可以尝试重写方法 "accessibilityElements" 和 return 一组标签和灰色视图,按照您希望它们读出的顺序排列。