Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Доступность iOS - есть ли способ узнать, когда VoiceOver изменил фокус?

Автор вопроса: TalucaОтветов: 2

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

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

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

iosvoiceoveruiaccessibility

Ответы

Ответ 1 · рейтинг 1 · Justin

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

Тем не менее, для вашего варианта использования Аарон прав, предлагая возвращать разные accessibilityLabel при каждом условии.

Ответ 2 · рейтинг 2 · Aaron Brager

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

Для желаемого поведения у вас есть два варианта:

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы