我有兴趣以编程方式捕获应用程序中的UI更改,并认为UIAccessibility
协议可能有所帮助。我发现了如何发布UIAccessibilityLayoutChangedNotification
和UIAccessibilityScreenChangedNotification
,但我不确定如何注册接收这些通知。
我已尝试使用NSNotificationCenter
,但name
param需要string
,而上述两个通知的类型为UIAccesibilityNotifications
{{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;
}
但是,没有相应的“获取”功能(甚至不是私有),因此一旦设置,原始侦听器就不能再次通知。