Я хотел бы вызывать метод каждый раз, когда в фокусе находится другой элемент, пока VoiceOver активен. Я надеялся, что для этого найдутся UIAccessibilityNotification, но не могу найти.
В конечном счете, моя цель - добавить дополнительное условие перед чтением ярлыка доступности. Например, вместо того, чтобы сказать (по умолчанию) "Если UIButton становится сфокусированным: прочитайте метку", я хотел бы иметь возможность сказать "Когда UIButton становится сфокусированным И цвет фона UIButton синий: читайте метку".
Итак, мой вопрос: как добавить дополнительное условие перед чтением метки или получить уведомление, когда новый элемент становится сфокусированным?
Ответ 1 · рейтинг 1 · Justin
Вы можете использовать протокол UIAccessibilityFocus для обнаружения изменений. в центре внимания клиентов специальных возможностей (включая VoiceOver). Обратите внимание, что UIAccessibilityFocus - это неформальный протокол, который каждый элемент доступности должен реализовывать независимо.
Тем не менее, для вашего варианта использования Аарон прав, предлагая возвращать разные accessibilityLabel при каждом условии.
Ответ 2 · рейтинг 2 · Aaron Brager
Вы не можете явно сказать, когда пользователь перемещает курсор VoiceOver (так же, как вы не можете сказать, куда смотрит зрячий пользователь).
Для желаемого поведения у вас есть два варианта:
- Установите
accessibilityLabel кнопки на соответствующее значение при изменении других условий.
Подкласс UIButton и переопределить его метод получения accessibilityLabel:
- (NSString *) accessibilityLabel {
if (SOME_CONDITION) {
return @"Hooray!";
} else {
return @"Womp womp";
}
}
Если вам нужно полностью отключить элемент, а не возвращать nil или пустую строку, вы должны установить для его свойства accessibilityElementsHidden значение YES.