Как получить UIAccessibilityNotifications в приложении для iPhone

Я интересуюсь получением изменений UI в моем приложении программно и думал что UIAccessibility протокол может помочь. Я нашел, как отправить UIAccessibilityLayoutChangedNotification и UIAccessibilityScreenChangedNotification но я не уверен, как зарегистрироваться для получения этих уведомлений.

Я попытался использовать NSNotificationCenter, но name параметрический усилитель ожидает a string, в то время как эти два уведомления выше имеют тип UIAccesibilityNotifications который является int.

Какая-либо идея, как зарегистрироваться для этих уведомлений?

Спасибо!

5
задан ЯegDwight 13 October 2010 в 09:58
поделиться

1 ответ

Отличный вопрос! К сожалению, вы не можете получать эти "уведомления", не влияя на нормальное поведение. (т.е. "нет, вы не можете")


Если вы разберете UIKit, то увидите, что UIAccessibilityPostNotification реализовано следующим образом:

static void (*__UIAccessibilityBroadcastCallback)(UIAccessibilityNotifications notification, id argument);
void UIAccessibilityPostNotification(UIAccessibilityNotifications notification, id argument) {
    __UIAccessibilityBroadcastCallback (notification, argument);
}

Это означает, что эти "уведомления" о доступности не являются обычными уведомлениями. Скорее, это просто параметры внутренней функции обратного вызова. Как реализована функция обратного вызова, зависит от используемого вами пакета доступности.

Вы можете заменить функцию обратного вызова на свою собственную, используя недокументированный API _UIAccessibilitySetBroadcastCallback:

void _UIAccessibilitySetBroadcastCallback(void (*replacement)(UIAccessibilityNotifications notification, id argument)) {
   __UIAccessibilityBroadcastCallback = replacement;
}

Однако, нет соответствующей функции "get" (даже не приватной), поэтому, как только вы ее установите, оригинальные слушатели не смогут быть снова уведомлены.

5
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: