将辅助功能画外音光标焦点移动到特定元素

Posted

技术标签:

【中文标题】将辅助功能画外音光标焦点移动到特定元素【英文标题】:Moving Accessibility Voiceover cursor focus to a specific element 【发布时间】:2014-01-06 21:34:58 【问题描述】:

我在将画外音光标移动到 viewDidAppear 上的特定元素时遇到问题。我关注Apple's guidelines 关注特定元素,在本例中为关闭按钮,但光标最终在其他地方

这是我的代码:

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                self.dismissButton);

任何帮助、想法,我们将不胜感激!非常感谢。

【问题讨论】:

【参考方案1】:

如果我没记错的话,我无法可靠地专注于视图的第一个元素,因为 VO 通常会专注于视图的顶部。

您正在执行的代码是正确的,但此时系统将触发它自己的事件并覆盖您的。

您可以尝试做的是延迟发布通知。但这会导致打开视图时焦点稍微跳动。

这不是一个很好的答案,但这就是我目前所处的位置。如果我想出办法,我会通知你。

【讨论】:

你找到更好的方法了吗?我也在做同样的事情,但它有点错误。 到目前为止还没有找到更好的方法。自从我研究辅助功能以来已经有一段时间了,如果我找到一种新的方法,我会更新答案。【参考方案2】:

This answer 可能会有所帮助。

基本上,如果您的元素尚未在一个容器视图中,您需要将它们包装在一个容器视图中,然后覆盖指定的方法。

通过给你想要的元素一个低于其他元素的标签,你可以让视图对数组进行排序,以确保它是 VoiceOver 使用的 accessibilityElements 数组中的第一个元素。或者您可以调整排序方法以另一种方式排序。

【讨论】:

这种方法的缺点是元素的顺序实际上也发生了变化。人们可以通过向左或向右滑动来从一个元素移动到另一个元素,这种按标签排序的方法会以一种不合逻辑的方式弄乱顺序。你真正想要的只是有一个自然的时间顺序,但只是让一个元素(不是第一个)在视图出现时获得焦点。我还不得不接受@feras-arabiat 建议的延迟,这远非理想。【参考方案3】:

仅供参考:从 ios 11 开始,UIAccessibilityScreenChangedNotificationUIAccessibilityLayoutChangedNotification 都能可靠地为我聚焦 Voice Over 元素。

【讨论】:

对于我所需要的,在数据​​源中使用 UIAccessibilityLayoutChangedNotification 更新对表格单元格中元素的关注允许我在重新加载单元格时通过传递正确的元素作为通知的参数,(也可以接受字符串)。完美。 这在使用原生导航栏或用作导航栏的自定义 UIView 的原生导航控制器设置中不起作用。焦点始终位于本机或自定义导航的后退按钮上。酒吧。但是,它确实说出了 UIAccessibilityScreenChangedNotification 中设置的下一个元素

以上是关于将辅助功能画外音光标焦点移动到特定元素的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 辅助功能方法 - 移动焦点

IOS辅助功能选择的标记不移动

UIAccessibility - 当关闭另一个视图时,将焦点设置到上一个辅助功能元素

辅助功能将焦点设置到导航栏标题项

Sprite Kit 的辅助功能(画外音)

关于 iOS 辅助功能。如何将焦点转移到pickerView