UIAccessibilityAnnouncementNotification асинхронен проблем

Забелязах, че методът за публикуване на известия на UIAccessibility е някакъв вид асинхронно повикване. Това ми звучи съвсем правилно, защото трябва да чуете последните събития, а не тези, които са се случили вчера... Но вижте този пример:

UIAccessibilityPostNotification( UIAccessibilityAnnouncementNotification, @"String 1");
UIAccessibilityPostNotification( UIAccessibilityAnnouncementNotification, @"String 2");

Можете да чуете само "низ 2".

Този пример е доста прост, можете да отговорите, че човек може да добави "низ 2" към "низ 1" и проблемът е решен. Но аз съм в такава ситуация, но не мога да добавя два низа.

Въпросът ми е: има ли метод за синхронизиране на известията?

Друг пример е следният. Да кажем, че имате приложение за лента с раздели. Когато превключите към определена лента, бих искал VoiceOver да произнася конкретен текст. Както вероятно знаете, когато изберете раздел, VoiceOver казва нещо като „Избрана лента Bar1“.

И така... обявата на VoiceOver обхваща моя конкретен текст.


person Altair Jones    schedule 10.09.2012    source източник
comment
Здравейте, успяхте ли да разрешите проблема в ios 5? Имам подобни проблеми и трябва да поддържам ios 5   -  person stephen    schedule 23.11.2012
comment
@AltairJones Успяхте ли да разрешите проблема? Ако да, как?   -  person Autonomous    schedule 08.04.2015


Отговори (2)


За iOS 6.0+ можете да използвате UIAccessibilityAnnouncementDidFinishNotification, за да синхронизирате вашите съобщения.

person Shatlyk Ashyralyyev    schedule 07.11.2012
comment
Благодаря... За съжаление, когато написах този въпрос, приложението ми беше съвместимо само с ios5. Тъй като ios6 беше пуснат, надстроих проекта и използвах вашия метод. Готино от Apple, беше много необходимо! - person Altair Jones; 08.11.2012
comment
Опитвам се да регистрирам манипулатор за UIAccessibilityAnnouncementDidFinishNotification, но не мога да го задействам, въпреки че VoiceOver чете и използвам iOS 6.1. Някакви идеи? - person abellina; 07.02.2013
comment
Имам същия проблем. От моето тестване изглежда, че UIAccessibilityAnnouncementDidFinishNotification се изпраща само за съобщения, които извършвате ръчно, като публикувате UIAccessibilityAnnouncementNotification. Не се задейства за обичайните съобщения на елементи на потребителския интерфейс, направени автоматично от атрибутите за достъпност. - person cidered; 03.04.2013
comment
За съжаление, това известие се задейства само ако публикувате UIAccessibilityAnnouncementNotification, в противен случай няма да бъдете уведомени, след като VoiceOver приключи с четенето. Това прави известието много по-малко полезно, защото целта е да можете да синхронизирате всички VO съобщения. Сега знам защо има само няколко игри, които са достъпни за потребителите на VO. - person mota; 04.04.2013
comment
Още по-лошо е. Ако потребителят докосне някой достъпен елемент, докато вашият текст се изговаря, вие дори няма да получите готовото известие за вашия собствен текст! Това определено е грешка в iOS 6.1. - person marcelnijman; 20.04.2013
comment
@Morta @marcelnijman Внедрете протокола UIAccessibilityFocus. Има метода accessibilityElementDidBecomeFocused - person user1046037; 30.11.2014
comment
Това е предназначено да се използва за предоставяне на текст за достъпност в момента на фокусиране, вместо да го предоставя предварително. Не решава проблема със синхронизацията, както беше въпросът с ОП. - person marcelnijman; 01.12.2014
comment
@marcelnijman, изглежда, че поне в iOS 9 известието се задейства в този случай с ключ в userInfo от UIAccessibilityAnnouncementKeyWasSuccessful. Но да, изглежда, че това се случва само със съобщения, публикувани ръчно или от системата и всъщност не преминават между визуални елементи. :( - person Mr Rogers; 05.05.2016

От iOS 11 нови приписани свойства за достъпност са въведени, включително специфичен клавиш accessibilitySpeechQueueAnnouncement, който позволява да поставите съобщението в опашка или да прекъснете текущата реч.

Въпреки това, ако изпращате много известия и VoiceOver трябва да поеме (потребителят щрака, за да фокусира нов елемент например), известията, които не са били озвучени, ще бъдат премахнати веднага щом системата огласи атрибутите на елемента (stackoverflow отговор).

Според мен в момента това е най-добрият начин за синхронизиране на известията.

А за втората ви заявка относно лентите с раздели може да се напише нов специален въпрос...

person XLE_22    schedule 06.12.2018