2010-01-26 21 views
5

Uygulamamdaki UI değişikliklerini programlı olarak yakalamakla ilgileniyorum ve UIAccessibility protokolünün yardımcı olabileceğini düşündüm. UIAccessibilityLayoutChangedNotification ve UIAccessibilityScreenChangedNotification'u nasıl göndereceğimi buldum ama bu bildirimleri almak için nasıl kayıt olacağımı bilmiyorum.iPhone Uygulamasında UIAccessibilityNotifications nasıl alınır

Ben NSNotificationCenter kullanarak denedim ama iki bildirimleri üzerinde bir int olan tip UIAccesibilityNotifications ait iken name param, bir string bekliyor.

Bu bildirimlerin nasıl kaydedileceği hakkında bir fikriniz var mı?

Teşekkürler!

cevap

5

Bu harika bir soru! Maalesef normal davranışları etkilemeden bu "bildirimleri" alamazsınız. (Yani "hayır yapamazsın")


Eğer UIKit sökmeye varsa, UIAccessibilityPostNotification bulacağınız bu gibi uygulanır: Bu erişilebilirlik "bildirimleri" anlamına

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

herhangi vardır normal bildirimler. Bunun yerine, sadece bir iç geri arama işlevinin parametreleridir. Geriçağırım işlevi nasıl kullanılır, kullandığınız erişilebilirlik paketine bağlıdır.

Sen belgesiz API _UIAccessibilitySetBroadcastCallback kullanarak kendi ile geri çağırma işlevi değiştirebilirsiniz:

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

Ancak, orada olmayan bir tekabül ayarladığınız bir kez nedenle, fonksiyonunu (hatta özel değil) "get" Bu, orijinal dinleyicilere tekrar bildirilemez.

+0

Detaylı açıklama için teşekkürler. Sadece birkaç takip soruları: - _UIAccessibilitySetBroadcastCallback UIAccessibilityPostNotification bir örnek yöntemidir? Öyleyse, bu, UIWebView veya diğer bazı görünümlerde uygulanabilecek bildirimler yerine, yalnızca kendi özel bildirimleriniz için geri bildirimi geçersiz kılabileceğiniz anlamına gelir. Özel bir çerçeveyi nasıl değiştireceğimi biraz belirsizim. UIKit'teki UIAccessibility.h dosyasına bu yöntem imzasını eklemek istedim, ancak bu dosyayı değiştiremiyorum. Bu yönteme erişmek için daha kolay bir yolu var mı? – MobileDev852

+0

@Mobile: (1) '_UIAccessibilitySetBroadcastCallback' bir C işlevidir. (2) Evet, sadece geçersiz kılabilirsiniz. Ve geçersiz kılın. Ancak, geri bildirim erişilebilirlik paketleri tarafından uygulanmaz. "UIWebView" sadece posta bildirimleri. (3) Fonksiyon prototipini her yere koyabilirsiniz. (4) Bu işe karışmamanı tavsiye etmiyorum, hapis cezası ya da değil. – kennytm

İlgili konular