这是我通知系统以读出我的元素的方式:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)
问题是当我发送多个通知时,已经在读取的通知会被打断!我希望能够排队…
我还在这里的另一个问题中发现,我应该使用属性字符串:
attributedString.addAttribute(NSAttributedStringKey( rawValue: UIAccessibilitySpeechAttributeQueueAnnouncement), value: true, range: range!.nsRange)
我在这里想念什么?
我进行了许多测试,试图了解这种行为,这让我发疯了。
我的结论是,如果您在VoiceOver讲{标签/提示/值}的同时发送通知,则不会考虑您的通知:当系统需要发声关注对象的属性时,可能会有一种抢占方式元件。
只有在发声结束时,您才能发布任意数量的通知,以根据需要进行深入的分析和解释。
该UIAccessibilitySpeechAttributeQueueAnnouncement键仅在系统不需要接管时才对您自己的通知有用。
UIAccessibilitySpeechAttributeQueueAnnouncement
例如,如果您发送了许多通知,并且用户轻弹以关注一个新元素,则系统会在发出该元素的属性后立即删除未发出通知的通知。
在这种情况下,如果您捕获到该UIAccessibilityAnnouncementDidFinish事件,UIAccessibilityAnnouncementKeyWasSuccessful则最后一个发声通知(UIAccessibilityAnnouncementKeyStringValue)的键的值将为错误值…后续的所有通知都将被忽略,并且观察者未提供任何信息。
UIAccessibilityAnnouncementDidFinish
UIAccessibilityAnnouncementKeyWasSuccessful
UIAccessibilityAnnouncementKeyStringValue
结论: 当出现新的焦点元素或屏幕/布局更改的通知时,VoiceOver不会考虑任何个人通知 。
如何为VoiceOver排队多个辅助功能通知?
根据上面的介绍,我建议 建立一种重试机制 ,该 机制 仍将发送您的通知 (x次) ,例如在y秒后仍未完全收到通知。 这可能是一个棘手的方法,可以更确定地完美地接收到通知。