这是我通知系统读出我的元素的方式:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)
字符串
问题是,当我发送多个通知时,已经在阅读的通知会被中断!我希望能够将其排队.
我还发现在另一个问题中,我应该使用属性化字符串:
attributedString.addAttribute(NSAttributedStringKey(
rawValue: UIAccessibilitySpeechAttributeQueueAnnouncement),
value: true,
range: range!.nsRange)
型
我错过了什么?
4条答案
按热度按时间kyvafyod1#
我错过了什么?
我做了很多测试,试图理解这种让我发疯的行为。
我的结论是,如果您在VoiceOver说出{label / hint / value}时发送通知,则不会考虑您的通知:当系统需要说出焦点元素的属性时,可能会有一种抢占。
只有在发声结束时,您才可以发布尽可能多的通知,以便根据您的意愿进行良好的分析和解释。
UIAccessibilitySpeechAttributeQueueAnnouncement
键仅在系统不需要接管时对您自己的通知有用。例如,如果您发送了许多通知,并且用户通过轻弹来聚焦一个新元素,那么一旦系统发声元素的属性,没有发声的通知就会被删除。
在这种情况下,如果你捕捉到
UIAccessibilityAnnouncementDidFinish
事件,你将得到一个false值,其中最后一个发声通知(UIAccessibilityAnnouncementKeyStringValue
)的UIAccessibilityAnnouncementKeyWasSuccessful
键.结论:当出现新的焦点元素或屏幕/布局更改通知时,旁白不会考虑任何个人通知。
如何将多个辅助功能通知排队以获得旁白?
根据上面暴露的内容,我建议设置一种重试机制,它仍然会发送你的通知 (x次),而它们在y秒后没有被完全接收。
这可能是一个棘手的方式,以更确定的通知是无故障接收。
️2023/12/15**编辑️
iOS 17中引入了一些新的优先级,您可能会对此主题感兴趣。😉
ruyhziif2#
在Swift 5中,这对我来说很有用:
字符串
关键是要设置. accessibilitySpeechcodeAnnouncement为true。
sqougxex3#
UIAccessibilityAnnouncementNotification
应该在应用程序需要向用户发出临时通知时使用。它可能不是为了重复调用而设计的。如果您确实想排队,您可能需要发布第一个通知,然后等待系统发布
UIAccessibilityAnnouncementDidFinishNotification
,然后您可以发布队列中的下一个消息。(But我想提醒一下:这真的是一个视力受损的用户所期望的吗?)
sc4hvdpw4#
您可以尝试使用https://github.com/spanage/AccessibilityAnnouncer来发送通知,但请记住,如果用户点击并与屏幕交互,这些通知将被忽略。