2016-07-20 1 views
8

В приложении iPhone Weather, при использовании VoiceOver, я заметил, что впервые нажав на раздел, он объявит раздел.Как заставить VoiceOver объявлять метки разделов в iOS?

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

Нажав на что-нибудь на нижнем столе, объявите «Ежедневные прогнозы», прежде чем продолжать описывать элемент, на который вы постучали. Нажатие всего остального в этой таблице не будет префикс «Ежедневные прогнозы».

Есть ли простой API, чтобы назвать разделы вашего приложения? Или вам нужно сделать это вручную, отслеживая курсор за кадром и динамически меняя свой ярлык? (Это даже работает? Можете ли вы изменить accessibilityLabel после того, как что-то постучило, но до того, как оно будет прочитано?)

+0

Вы можете использовать UIGestureRecognizer обнаружить прикосновение к какому UIView вы хотели, использовать логическое значение для указания погоды вы объявили что-то, и использовать AVSpeechUtterance, чтобы объявить, что вы хотите. – Jonathan

+0

@thealienisreal Я пришел сюда с тем же вопросом. Вы когда-нибудь были в этом уверены? – djibouti33

+0

@ djibouti33 Не повезло. Множество ответов на общую реализацию доступности, но никто не решает этот конкретный сценарий. – thealienisreal

ответ

0

Есть ли простой API для названия разделов вашего приложения?

Кажется, что наиболее подходящей ссылкой является Apple's Accessibility Programming Guide.

И его API, Apple's UIAccessibility Documentation.

Установка объекта shouldGroupAccessibilityChildren выглядит как лучший способ достижения вашей цели. Связаны API, описывает его как,

Значение Логическое значение, указывающее ли VoiceOver следует сгруппировать элементы, которые являются потомками приемника, независимо от их позиции на экране. Установка значения этого свойства в YES в родительском представлении элементов в вертикальных столбцах заставляет VoiceOver уважать группировку приложения и правильно перемещать его.

Что нужно иметь в виду:

  1. Является ли целевой элемент доступность элемента? (вы можете проверить с помощью isAccessibilityElement свойства, стандартные элементы управления UIKit и виды реализации протокола UIAccessibility по умолчанию)
    • Если да, то вам просто нужно установить его доступность атрибутов
    • Если нет, то вам необходимо изменить его значение , view.isAccessibilityElement = true
  2. свойство accessibilityLabel идентифицирует элемент
  3. свойство accessibilityHint описывает действие инициируется элементом
  4. Вы можете установить доступность атрибутов в раскадровке
  5. Или, вы можете установить доступность атрибутов в реализации Вашего вида подкласса
+0

Свойство 'shouldGroupAccessibilityChildren' влияет только на то, что курсор VoiceOver перемещает элементы, но это логическое значение не дает способа назвать этот раздел. Вы описываете способ маркировки элементов, но я ищу способ объявить имя раздела при нажатии любого элемента, прежде чем объявлять сам элемент в этом разделе, когда секция получает фокус, как это делает приложение погоды. – thealienisreal

+0

Вы установили свойство 'isAccessibilityElement' вашего содержащего представления в' true'? Если вы сделаете это и сгруппируете его с элементами children, это может решить проблему. –

+0

Возможно, приложение Apple's Weather функционирует так, как вы упомянули, поскольку оно содержит пользовательские элементы в представлении контейнера. «С другой стороны, представление контейнера содержит другие элементы, с которыми пользователи могут взаимодействовать. Например, в пользовательском подклассе UIView, который выполняет собственный рисунок геометрических фигур, формы представляют собой элементы, с которыми пользователи могут взаимодействовать, и которые отличные от вида контейнера. Такие отдельные элементы в представлении контейнера автоматически не доступны (поскольку они не являются подклассами UIView) ». Этот метод может автоматически объявить раздел. –

2

Есть два подхода я думаю:

  1. подклассов UITableViewCell и переопределение метки accessibilityLabel.

    - (NSString *) accessibilityLabel 
    { 
        NSString* voiceOverString; 
        // append section title on voiceOverString and then the elements value 
        return voiceOverString; 
    } 
    
  2. Смотрите эту ссылку из Apple docs: Вы можете setAccessibilityLabel клетки от cellForRowAtIndexPath. Пример для самого приложения погоды.

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

  • Нет связанных вопросов^_^