ios - 如何为 VoiceOver 排队多个辅助功能通知?

标签 ios swift uiaccessibility

这就是我通知系统读出我的元素的方式:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)

问题是,当我发送多个通知时,已经在阅读的通知被打断了!我希望能够排队...

我在这里的另一个问题中也发现我应该使用属性字符串:

attributedString.addAttribute(NSAttributedStringKey(
    rawValue: UIAccessibilitySpeechAttributeQueueAnnouncement), 
    value: true, 
    range: range!.nsRange)

我在这里错过了什么?

最佳答案

What am I missing here?

我做了很多测试,试图理解这种让我发疯的行为。

我的结论是,如果您在 VoiceOver 说出 {label/hint/value} 时发送通知,您的通知将不会被考虑在内:当系统需要说出属性时,可能会有一种抢占一个重点元素。

只有在发声结束时,您才可以发布任意数量的通知,以便按照您的意愿进行良好的分析和解释。

UIAccessibilitySpeechAttributeQueueAnnouncement 键仅在系统不需要接管时对您自己的通知有用。

如果您发送了很多通知,并且用户轻弹以聚焦一个新元素,那么当系统发出元素的属性时,未发出的通知将被删除。

在这种情况下,如果您捕捉到 UIAccessibilityAnnouncementDidFinish 事件,您将得到一个带有 UIAccessibilityAnnouncementKeyWasSuccessful 键的假值,用于最后一个语音通知(UIAccessibilityAnnouncementKeyStringValue)...以下所有内容都将被忽略,观察者不提供任何信息。

结论:当出现新的焦点元素或屏幕/布局更改通知时,VoiceOver 不会考虑任何个人通知

How can I queue multiple accessibility notifications for VoiceOver?

根据上面公开的内容,我建议设置一种重试机制,当您的通知未被完美接收时,它仍会发送您的通知(x 次)例如在 y 秒后。
这可能是一种更加确定通知被完美接收的棘手方法。

关于ios - 如何为 VoiceOver 排队多个辅助功能通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51732172/

相关文章:

ios - 防止 VoiceOver 自动聚焦于某个对象

ios - 如何在 Swift Xcode iOS 中以编程方式延迟启动画面

ios - 如何覆盖父类(super class)的可变属性

Swift - 打印今年的当前星期几

ios - 锁定 UIAccessibility 焦点的方法

ios - AccessibilityElements 在 TableView 中不起作用

java - Gmail API 服务器访问 "invalid_grant"iOS?

ios - [NSBundle mainBundle] URLForResource :withExtension: in iOS 3 SDK 的替代方案是什么

ios - 更新标签对象中的字体

swift - 更改了哪个日历(使用 EKEventStoreChangedNotification?)