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

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

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

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


person Taluca    schedule 21.04.2015    source источник


Ответы (2)


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

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

person Justin    schedule 22.04.2015
comment
Пример, который я использовал, на самом деле не применим к моей ситуации, это просто попытка объяснить мою проблему и цели. При этом я ценю ваше предложение относительно UIAccessibilityFocus и обязательно рассмотрю его. Заранее спасибо. - person Taluca; 24.04.2015
comment
Чего именно вы пытаетесь достичь, Талука? Предложение Джастина определенно решит описанную вами проблему, но если это не та проблема, которую вы пытаетесь решить, трудно дать более точный ответ. - person Kasper Munck; 01.05.2015

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

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

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

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

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

person Aaron Brager    schedule 21.04.2015