开发者

How to receive UIAccessibilityNotifications in iPhone App

I'm interested in capturing UI changes in my application programmatically and thought that the UIAccessibility protocol may help. I've fou开发者_Python百科nd how to post UIAccessibilityLayoutChangedNotification and UIAccessibilityScreenChangedNotification but I'm not sure how to register to receive these notifications.

I've tried using NSNotificationCenter, but the name param expects a string, while the two notifications above are of the type UIAccesibilityNotifications which is an int.

Any idea how to register for these notifications?

Thanks!


That's a great question! Unfortunately you cannot receive these "notifications" without affecting normal behavior. (i.e. "no you can't")


If you disassemble UIKit, you'll find UIAccessibilityPostNotification is implemented like this:

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

That means these accessibility "notifications" aren't any normal notifications. Rather, they are just parameters to an internal callback function. How the callback function is implemented depends on the accessibility bundle you're using.

You can replace the callback function with your own using the undocumented API _UIAccessibilitySetBroadcastCallback:

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

However, there isn't a corresponding "get" function (not even private), so once you set it, the original listeners cannot be notified again.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜