一尘不染

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

swift

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

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)

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

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

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

我在这里想念什么?


阅读 340

收藏
2020-07-07

共1个答案

一尘不染

我在这里想念什么?

我进行了许多测试,试图了解这种行为,这让我发疯了。

我的结论是,如果您在VoiceOver讲{标签/提示/值}的同时发送通知,则不会考虑您的通知:当系统需要发声关注对象的属性时,可能会有一种抢占方式元件。

只有在发声结束时,您才能发布任意数量的通知,以根据需要进行深入的分析和解释。

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

例如,如果您发送了许多通知,并且用户轻弹以关注一个新元素,则系统会在发出该元素的属性后立即删除未发出通知的通知。

在这种情况下,如果您捕获到该UIAccessibilityAnnouncementDidFinish事件,UIAccessibilityAnnouncementKeyWasSuccessful则最后一个发声通知(UIAccessibilityAnnouncementKeyStringValue)的键的值将为错误值…后续的所有通知都将被忽略,并且观察者未提供任何信息。

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

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

根据上面的介绍,我建议 建立一种重试机制 ,该 机制 仍将发送您的通知 (x次) ,例如在y秒后仍未完全收到通知。
这可能是一个棘手的方法,可以更确定地完美地接收到通知。

2020-07-07