2010-01-26 5 views
5

Je suis intéressé par la capture par programmation des modifications de l'interface utilisateur de mon application et je pense que le protocole UIAccessibility peut aider. J'ai trouvé comment poster UIAccessibilityLayoutChangedNotification et UIAccessibilityScreenChangedNotification mais je ne suis pas sûr comment s'inscrire pour recevoir ces notifications.Comment recevoir UIAccessibilityNotifications dans l'application iPhone

J'ai essayé d'utiliser NSNotificationCenter, mais le name attend une string param, tandis que les deux notifications sont au-dessus du type UIAccesibilityNotifications qui est un int.

Une idée de comment s'inscrire à ces notifications?

Merci!

Répondre

5

Voilà une bonne question! Malheureusement, vous ne pouvez pas recevoir ces "notifications" sans affecter le comportement normal. (C.-à- « non vous ne pouvez pas »)


Si vous désassembler UIKit, vous trouverez UIAccessibilityPostNotification est implémenté comme ceci:

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

Cela signifie « notifications » ces accès ne sont pas tout notifications normales. Au contraire, ils ne sont que des paramètres d'une fonction de rappel interne. La manière dont la fonction de rappel est implémentée dépend du regroupement d'accessibilité que vous utilisez.

Vous pouvez remplacer la fonction de rappel avec votre propre en utilisant l'API non documentée _UIAccessibilitySetBroadcastCallback:

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

Cependant, il n'y a pas une correspondante fonction « get » (même pas privé), donc une fois que vous avez défini En effet, les écouteurs originaux ne peuvent pas être notifiés à nouveau.

+0

Merci pour l'explication détaillée. Juste quelques questions de suivi: - est le _UIAccibilitySetBroadcastCallback une méthode d'instance de UIAccessibilityPostNotification? Si tel est le cas, cela signifie-t-il que vous ne pouvez remplacer que le rappel de vos propres notifications personnalisées, plutôt que les notifications qui peuvent être implémentées dans UIWebView ou une autre vue de ce type. -Je ne sais pas comment modifier un cadre privé. Je voulais simplement ajouter cette méthode à UIAccessibility.h dans UIKit mais je ne peux pas modifier ce fichier. Y a-t-il un moyen plus facile d'accéder à cette méthode? – MobileDev852

+0

@Mobile: (1) '_UIAccessibilitySetBroadcastCallback' est une fonction C. (2) Oui, vous ne pouvez que passer outre. Et être écrasé. Mais non, le rappel est implémenté par les bundles d'accessibilité. Le 'UIWebView' ne publie que des notifications. (3) Vous pouvez placer le prototype de fonction n'importe où. (4) Je ne vous recommande pas de vous embêter avec cela, jailbreaké ou non. – kennytm

Questions connexes