如何在iPhone App中接收UIAccessibilityNotifications

时间:2010-01-26 02:27:28

标签: iphone

我有兴趣以编程方式捕获应用程序中的UI更改,并认为UIAccessibility协议可能有所帮助。我发现了如何发布UIAccessibilityLayoutChangedNotificationUIAccessibilityScreenChangedNotification,但我不确定如何注册接收这些通知。

我已尝试使用NSNotificationCenter,但name param需要string,而上述两个通知的类型为UIAccesibilityNotifications {{1} }}

知道如何注册这些通知吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

这是一个很好的问题!很遗憾,您无法在不影响正常行为的情况下收到这些“通知”。 (即“不,你不能”)


如果您反汇编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;
}

但是,没有相应的“获取”功能(甚至不是私有),因此一旦设置,原始侦听器就不能再次通知。