How can I queue multiple accessibility notifications for VoiceOver?

半城伤御伤魂 提交于 2019-11-28 07:37:32

问题


This is how I'm notifying the system to read out my elements:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)

The problem is that when I send multiple notifications, the one that is already reading gets interrupted! I want to be able to queue it...

I also found in another question here that I should use attributed string:

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

What am I missing here?


回答1:


What am I missing here?

I have made many tests to try and understand this behaviour that drove me crazy.

My conclusion is that if you send a notification while VoiceOVer is speaking a {label / hint / value}, your notification won't be taken into account : there may be a kind of preemption when the system needs to vocalize an attribute of a focused element.

That's only at the end of the vocalization that you can post as many notifications as you want to be well analyzed and interpreted as you wish.

The UIAccessibilitySpeechAttributeQueueAnnouncement key is only useful with your own notifications when the system doesn't need to take over.

If you send many notifications and that the user flicks to focus a new element for instance, the notifications that weren't vocalized will be removed as soon as the system vocalizes the element's attributes.

In that case, if you catch the UIAccessibilityAnnouncementDidFinish event, you will have a false value with the UIAccessibilityAnnouncementKeyWasSuccessful key for the last vocalized notification (UIAccessibilityAnnouncementKeyStringValue)... all the following ones will be ignored with no info given by the observer.

Conclusion : no personal notification is taken into account by VoiceOver when a new focused element or screen/layout changed notification occurs.




回答2:


UIAccessibilityAnnouncementNotification is supposed to be used when the app needs to make an ad-hoc announcement to the user. It's probably not designed to be called repeatedly.

If you did want to queue, you might need to post the first notification, then wait for UIAccessibilityAnnouncementDidFinishNotification to be posted by the system, then you could post the next message in your queue.

(But I'd offer caution: is this really what a visually-impaired user will be expecting?)




回答3:


You could try using https://github.com/spanage/AccessibilityAnnouncer for your own notifications but keep in mind that if the user taps and interacts with the screen these notifications will be ignored.



来源:https://stackoverflow.com/questions/51732172/how-can-i-queue-multiple-accessibility-notifications-for-voiceover

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!