这就是我通知系统读出我的元素的方式:
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/