我有兴趣以编程方式捕获应用程序中的UI更改,并认为该UIAccessibility协议可能有所帮助.我发现了如何发布UIAccessibilityLayoutChangedNotification,UIAccessibilityScreenChangedNotification但我不知道如何注册接收这些通知.
我已经尝试使用NSNotificationCenter,但namePARAM需要一个string,而上述两个通知是所述类型的UIAccesibilityNotifications,其是一个int.
知道如何注册这些通知吗?
谢谢!
这是一个很好的问题!很遗憾,您无法在不影响正常行为的情况下收到这些"通知".(即"不,你不能")
如果你反汇编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)
但是,没有相应的"获取"功能(甚至不是私有),因此一旦设置它,原始侦听器就不能再次通知.