首页 文章

在VoiceOver可访问的UITableView中动态更新内容

提问于
浏览
3

我正在尝试使我的应用程序更易于访问,到目前为止,标签和提示等标准可访问性内容正在创造奇迹 . 我遇到了一个问题,但动态更新了UITableView中显示的内容 .

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

我试着看看是否还有尝试理解VoiceOver当前是否处于活动状态,但据我所知,当VoiceOver完成时只会发布通知

UIAccessibilityAnnouncementDidFinishNotification

VoiceOver开始时没有相应的通知 . 所以我的TableViewController无法知道VoiceOver当前是否处于活动状态,并且它不应该更新任何accessibilityLabels .

我希望我至少可以检测到我的一个TableView单元格是使用的选定的accessibilityElement

accessibilityElementIsFocused

方法 . 然而,在我的所有测试中,我都无法看到这种可靠的自定义UITableViewCell .

我也尝试为我的自定义单元格实现accessibilityLabel的getter,希望这可能有效,但遗憾的是会出现相同的行为 .

我留下的唯一解决方案是用户可配置的频率,用于动态内容可访问性更新,比如5,10,20秒...这可以阻止我更新我的标签,直到我知道最后更改的内容肯定已被读出 . 实际上,如果用户选择在最后一次更新后的8秒钟内选择一个小区,在2秒钟内选择10秒限制并且标签将更新导致语音重新启动,则实际上甚至可能会中断此操作 .

有没有人知道如何最好地处理这种动态更新内容?我假设tableview单元格稍微复杂一些,但总的来说我只是不明白苹果希望你如何处理动态内容 . 它需要解决的只是另一个通知

UIAccessibilityAnnouncementDidStartNotification

或者更好的方法来询问VoiceOver当前是否处于活动状态 . 但我似乎找不到任何东西!

感谢您的时间,非常感谢您的任何提示 . 干杯!

1 回答

  • 1

    你想做两件事 . 首先,您希望利用“更新频繁”特性 . 这应该可以改善内容开启时应用的行为 .

    An image of the Accessibility section of Interface Builder in XCode

    这应该有很多帮助 . 然后,您还需要为用户提供一种停止更新内容的方法 . 无论您是否执行上述操作,这都是满足WCag 2.0准则2.2.2的绝对要求 .

相关问题