2010-01-26 7 views
5

Ich bin daran interessiert, UI-Änderungen in meiner Anwendung programmgesteuert zu erfassen und dachte, dass das Protokoll UIAccessibility möglicherweise hilfreich ist. Ich habe gefunden, wie man UIAccessibilityLayoutChangedNotification und UIAccessibilityScreenChangedNotification bekannt gibt, aber ich bin nicht sicher, wie man sich registriert, um diese Mitteilungen zu empfangen.So erhalten Sie UIAccessibilityNotifications in der iPhone App

Ich habe versucht, NSNotificationCenter verwenden, aber die name param erwartet einen string, während die beiden oben genannten Mitteilungen des Typs UIAccesibilityNotifications sind, die ein int ist.

Haben Sie eine Idee, wie Sie sich für diese Benachrichtigungen registrieren?

Danke!

Antwort

5

Das ist eine gute Frage! Leider können Sie diese "Benachrichtigungen" nicht empfangen, ohne das normale Verhalten zu beeinflussen. (Dh „Nein, Sie können nicht“)


Wenn Sie UIKit zerlegen, werden Sie UIAccessibilityPostNotification finden wird wie folgt umgesetzt:

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

Das bedeutet, diese Zugänglichkeit „Mitteilungen“ sind nicht normale Benachrichtigungen Sie sind vielmehr nur Parameter einer internen Callback-Funktion. Wie die Callback-Funktion implementiert wird, hängt vom verwendeten Accessibility-Bundle ab.

Sie können die Callback-Funktion mit Ihrem eigenen ersetzen den undokumentierte API _UIAccessibilitySetBroadcastCallback mit: Allerdings

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

, gibt es keine entsprechenden „get“ Funktion (auch nicht privat), so dass, sobald Sie festgelegt Es können die ursprünglichen Listener nicht erneut benachrichtigt werden.

+0

Danke für die detaillierte Erklärung. Nur ein paar Nachfragen: - Ist das _UIAccessibilitySetBroadcastCallback eine Instanzmethode von UIAccessibilityPostNotification? Wenn dies der Fall ist, bedeutet dies, dass Sie nur den Rückruf für Ihre eigenen benutzerdefinierten Benachrichtigungen überschreiben können, anstatt Benachrichtigungen, die in UIWebView oder einer anderen solchen Ansicht implementiert werden. -Ich bin ein wenig unklar, wie ein privates Framework zu ändern. Ich wollte nur diese Methodensignatur zu UIAccessibility.h in UIKit hinzufügen, aber ich kann diese Datei nicht ändern. Gibt es einen einfacheren Zugang zu dieser Methode? – MobileDev852

+0

@Mobile: (1) '_UIAccessibilitySetBroadcastCallback' ist eine C-Funktion. (2) Ja, Sie können nur überschreiben. Und übersteuert werden. Aber nein, der Callback wird von den Accessibility-Bundles implementiert. Das 'UIWebView' versendet nur Benachrichtigungen. (3) Sie können den Funktionsprototyp beliebig platzieren. (4) Ich empfehle Ihnen nicht, sich damit zu beschäftigen, jailbroken oder nicht. – kennytm

Verwandte Themen