2015-04-21 2 views
1

Я хотел бы вызвать метод каждый раз, когда другой элемент сфокусирован, когда VoiceOver активен. Я надеялся, что для этого будет UIAccessibilityNotification, но я не могу найти никого.Доступность iOS - есть ли способ сказать, когда VoiceOver изменил фокус?

В конечном счете, моя цель - добавить дополнительное условие перед чтением метки доступности. Например, в отличие от высказывания (по умолчанию) «Если UIButton становится сфокусированным: прочитайте ярлык», я хотел бы иметь возможность сказать «Когда UIButton становится сфокусированным И UIButton цвет фона синий: читайте метку».

Итак, мой вопрос: как мне добавить дополнительное условие перед чтением метки или получить уведомление, когда новый элемент станет сфокусированным?

ответ

0

Вы можете использовать протокол UIAccessibilityFocus для обнаружения изменений в фокусе клиентами доступности (включая VoiceOver). Обратите внимание, что UIAccessibilityFocus является неофициальным протоколом, который каждый элемент доступности должен реализовывать независимо.

Что касается вашего прецедента, то Aaron имеет право предложить вернуть другой тип accessibilityLabel при каждом условии.

+0

Пример, который я использовал, фактически не применим к моей ситуации, а просто попытка объяснить мои проблемы и цели. Это, как говорится, я ценю ваше предложение относительно 'UIAccessibilityFocus', и я обязательно рассмотрю его. Заранее спасибо. – Taluca

+0

Что именно вы пытаетесь достичь Taluca? Предложение Джастина, безусловно, решит проблему, которую вы начертите, но если это не проблема, которую вы пытаетесь решить, сложно дать более точный ответ. –

2

Вы не можете явно указать, когда пользователь перемещает курсор VoiceOver (точно так же, как вы не можете определить, где находится зрячий пользователь).

Для поведения вы хотите, у вас есть два варианта:

  1. Установите кнопки он accessibilityLabel соответствующее значение, когда изменения других условий.
  2. Подкласс UIButton и переопределить его метод accessibilityLabel геттер:

    - (NSString *) accessibilityLabel { 
        if (SOME_CONDITION) { 
         return @"Hooray!"; 
        } else { 
         return @"Womp womp"; 
        } 
    } 
    

Если необходимо отключить элемент целиком, а не возвращать nil или пустую строку, вы должны установить его свойство accessibilityElementsHidden в YES.