如何在iPhone App中接收UIAccessibilityNotifications

Mob*_*852 5 iphone

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

我已经尝试使用NSNotificationCenter,但namePARAM需要一个string,而上述两个通知是所述类型的UIAccesibilityNotifications,其是一个int.

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

谢谢!

ken*_*ytm 5

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


如果你反汇编UIKit,你会发现这样UIAccessibilityPostNotification实现:

static void (*__UIAccessibilityBroadcastCallback)(UIAccessibilityNotifications notification, id argument);
void UIAccessibilityPostNotification(UIAccessibilityNotifications notification, id argument) {
    __UIAccessibilityBroadcastCallback (notification, argument);
}
Run Code Online (Sandbox Code Playgroud)

这意味着这些可访问性"通知"不是任何正常通知.相反,它们只是内部回调函数的参数.如何实现回调函数取决于您正在使用的辅助功能包.

您可以使用未记录的 API 替换回调函数_UIAccessibilitySetBroadcastCallback:

void _UIAccessibilitySetBroadcastCallback(void (*replacement)(UIAccessibilityNotifications notification, id argument)) {
   __UIAccessibilityBroadcastCallback = replacement;
}
Run Code Online (Sandbox Code Playgroud)

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