2015-04-09 4 views
1

У меня такие требования.Заказ голосовой поддержки после загрузки контроллера просмотра

Контроллер моего представления загружает данные из службы удаленного отдыха и данные представлены в таблице. Перед началом процесса загрузки Мне нужно Голос диктора сказать

«Загрузка зданий. Пожалуйста, подождите»

после загрузки успеха данных мне нужно Голос диктора сказать

«Здания загружены»

и после этого мне нужно сказать, что находится в заголовке в моем контроллере зрения

«Выберите здание».

Порядок очень важен. Теперь Voiceover читает в начале после загрузки контроллер, что в заголовке контроллера. Когда начата загрузка данных о зданиях, сообщение заголовка «Выберите здание» будет прервано и начнется «Загрузка зданий. Подождите». Слепой человек должен быть проинформирован об этих состояниях в правильном порядке, поэтому после загрузки данных мне нужно сказать «Выберите здание».

Мне нужно взять контроль над устным сообщением. Мне нужно контролировать, когда говорят о содержимом controller.title или отключить control.title из озвучивания.

Чтобы сообщить закадровый, чтобы сказать что-то я использую этот кусок кода:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Buildings loaded"); 
+0

Предотвращает взаимодействие пользователей с приложением, в то время как данные действительно загружают пользовательский опыт, который вы имели в виду? –

ответ

1

UIAccessibilityScreenChangedNotification прослушивается. Это СЛЕДУЕТ делать то, что вы хотите.

Альтернативой было бы следующее:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Buildings loaded"); 

ОДНАКО, это также прослушивают, яй APPLE! Единственный способ получить нужное поведение - захватить экран с измененным уведомлением, поскольку он является единственным, который не прослушивается с iOS 8.2.

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Say these words please"); 

Это обеспечивает дополнительную мелодию Beep-Boop в VoiceOver, но это не страшно. Таким образом, это сработает для вас, однако решение, которое я бы предложил с точки зрения A11y, было бы следующим:

Когда вы загружаете свой диспетчер просмотра и появляется ожидающий диолог, переместите фокус на него. Предположительно, это на самом деле модальный (это означает, что вы не можете взаимодействовать с остальной частью приложения, пока это не будет сделано). Вместо предоставления строки, которая будет объявлена, если вы предоставите UIElement, фокус переместится на элемент, и он будет считан.

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _PleaseWaitLabel); 

Затем, когда загрузка закончена, сделайте следующее:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _ChooseABuildingHeading); 

Пропустить «здания нагруженных» объявление вообще, не надо, пока ваше объявление ожидания режимный, и вы после этого сдвиньте фокус на соответствующий заголовок, будет очевидно, что происходит.

+0

Таким образом, я попытаюсь ввести дополнительную метку с информацией о загрузке данных под индикатором pull, чтобы обновить активность, и изменить фокус на кольцо над этим элементом. Я начинаю понимать, как это работает. При загрузке данных пользователь не должен изменять голос по фокусу. Есть ли способ блокировать фокусировку на этом новом ярлыке до момента загрузки данных? –

+0

Да, всплывайте в этом заголовке в модальном диалоге и задайте пункты не в диалоге для self.view.accessibilityElementsHidden = yes. – ChrisCM

+0

Отлично! Большое спасибо за обмен знаниями. Теперь я смотрю на это с разных точек зрения. –

Смежные вопросы