這是一個很好的問題!不幸的是,您不能在不影響正常行爲的情況下收到這些「通知」 (即「不,你不能」)
如果你拆開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;
}
但是,沒有一個相應的「獲取」功能(即使不是私人),所以一旦你設置它,原來的聽衆不能再被通知。
感謝您的詳細解釋。只是幾個後續問題: - 是UIAccessibilitySetBroadcastCallback UIAccessibilityPostNotification的實例方法?如果是這樣,這是否意味着您只能覆蓋自定義通知的回調,而不是可能在UIWebView或其他此類視圖中實現的通知。 - 我有點不清楚如何修改私人框架。我只想將此方法簽名添加到UIKit中的UIAccessibility.h中,但我無法修改此文件。有沒有更簡單的方法來訪問這種方法? – MobileDev852 2010-01-26 21:37:06
@ Mobile:(1)'_UIAccessibilitySetBroadcastCallback'是一個C函數。 (2)是的,你只能覆蓋。並被覆蓋。但是無法通過可訪問性包實現回調。 'UIWebView'只發布通知。 (3)你可以把函數原型放在任何地方。 (4)我不建議你把這個弄糟,越獄或者不越獄。 – kennytm 2010-01-27 05:36:37