2013-06-26 58 views
0

我在我的UItextField上有一個觀察者。它基本上看看是否「已啓用」屬性已更改。獲取與我的觀察者關聯的UITextField

如果啓用狀態更改,我想要一個名爲fade的方法來運行。淡入淡出需要將一個TextField傳遞給它。

如何使用與發送消息的觀察者關聯的textField?

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:  (NSDictionary *)change context:(void *) context; 
{ 
    int new = [change objectForKey:NSKeyValueChangeNewKey]; 
    int old = [change objectForKey:NSKeyValueChangeOldKey]; 

    if (new != old) 
    { 
     [self fadeEnable:"requires txtField"]; 
    } 
} 

感謝

回答

2

正如文件顯示, https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html,在方法調用參數「對象」你的封裝文本字段。 你只需要投它,你就完成了。

要投它,使用:

UITextField *tf = (UITextField *)object; 

編輯解決您的後續問題: 在手勢識別的情況下,你想獲得您添加的識別到視圖。 「發件人」是識別器本身,sender.view將爲您提供關聯的視圖。 這些都不會改變,因爲識別器只能與VIEWS一起使用。

現在,有了觀察者,你不一定需要一個視圖。你想要一個對象。這就是爲什麼'對象'是'id'類型的,所以你可以添加觀察者到任意類型的對象。當然,缺點是你需要演員。如果您不知道要投射什麼類型,則可能會有用。

噢,沒有一個是關於界面構建器與代碼中的東西。

如果你覺得這樣很混亂,我建議你去學習關於gestureRecognizers和Key-Value-Observing的文檔。如果你有具體的問題,讓我知道,或只是問一個新的問題;)

+0

我其實試過,但錯誤地使用UITextField * txtField =(UITextField *)object.view;它基於我用來獲取手勢識別器的UITextField的內容UITextField * txtField =(UITextField *)sender.view;爲什麼它需要手勢識別器的.view部分而不是Observer?是否因爲手勢識別器已添加到界面構建器中? – user1923975

+0

@ user1923975 - 查看我的更新回答 – katzenhut

+0

非常感謝您的幫助,這確實有助於爲我解決問題。 – user1923975