ios - 使 UITableView 中的动态更新内容可供 VoiceOver 访问

标签 ios uitableview accessibility voiceover uiaccessibility

我正在努力让我的应用程序更易于访问,到目前为止,标签和提示等标准可访问性正在创造奇迹。然而,我在动态更新 UITableView 中显示的内容时遇到了问题。

表格的每一行大约每秒更新一次,但如果我尝试在此时创建每个单元格的accessibilityLabel,那么我发现当标签内容发生变化时,读出所选标签的 VoiceOver 会不断中断自身,这是一个问题因此系统只是再次从头开始读取标签内容(实际上,一个奇怪的怪癖表明,对于选定的第一个单元格,画外音有时可以正常工作,但在选择新单元格时,此错误会返回)。

我尝试查看是否有办法尝试了解 VoiceOver 当前是否处于事件状态,但据我所知,当 VoiceOver 完成时仅发布一条通知

UIAccessibilityAnnouncementDidFinishNotification

VoiceOver 开始时没有类似的通知。因此,我的 TableViewController 无法知道 VoiceOver 当前处于事件状态并且它不应该更新任何accessibilityLabels。

我希望我至少可以使用以下方法检测到我的 TableView 单元格之一是所选的accessibilityElement

accessibilityElementIsFocused

方法。然而,在我的所有测试中,我无法看到自定义 UITableViewCell 的可靠触发。

我还尝试为我的自定义单元实现accessibilityLabel的getter,希望这可以工作,但遗憾的是发生了同样的行为。

我剩下的唯一解决方案是用户可配置动态内容可访问性更新的频率,例如 5、10、20 秒......这可以阻止我更新我的标签,直到我知道最后更改的内容肯定会被读出。实际上,如果用户选择在上次更新后 8 秒(例如 2 秒)选择一个单元格(10 秒限制),并且标签将更新,导致画外音重新启动,那么这也可能会被中断。

有人知道如何最好地处理这种动态更新内容吗?我认为表格 View 单元格使事情变得有点复杂,但总的来说,我只是不明白苹果希望你如何处理动态内容。解决这个问题所需要的只是另一个通知

UIAccessibilityAnnouncementDidStartNotification

或者更好的方法来查询 VoiceOver 当前是否处于事件状态。但我好像没找到!

感谢您的宝贵时间,非常感谢您提供任何有关此问题的提示。干杯!

最佳答案

你想做两件事。首先,您要利用“频繁更新”特性。这应该会改善内容打开时应用程序的行为。

An image of the Accessibility section of Interface Builder in XCode

这应该会有很大帮助。那么你还需要为用户提供一种停止更新内容的方法。无论您是否执行上述操作,这都是满足 WCag 2.0 指南 2.2.2 的绝对要求。

关于ios - 使 UITableView 中的动态更新内容可供 VoiceOver 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583040/

相关文章:

css - 根据 WCAG 2.0,在 alt ="text"中使用的字符限制是多少?

html - 在网站上的两个选项之间进行选择,我应该使用按钮还是单选按钮?

javascript - 不知道如何在 React Native 应用程序中使用 navigation.navigate

android - 如何将 UIImagePickerController 中的 iOS 视频编码为 .mp4,以便 Android 设备可以播放它们?

iphone - Cell TextLabel 多行不再工作

iPhone SDK - 突出显示 TableView 中选定的单元格

java - 提取带标签的 PDF 中的阅读顺序序列

ios - 如何测试您的 iOS 应用程序是否在内存警告方面表现良好?

ios - 在 iOS 中存储 session ID 的最佳方式是什么?

ios - 使用 UITableViewCell 进行委托(delegate)