2009-08-04 90 views
11

我正在玩寫我的第一個iphone應用程序; SDK 3.0。我有一個UITextField,當輸入文本時,我想從文本字段獲得doubleValue並執行一些計算並將它們顯示在UITableView中。爲什麼textFieldDidEndEditing:不被調用?

UITextField的委託採用UITextFieldDelegate協議,並實現了textFieldShouldReturn:和textFieldDidEndEditing:方法。 textFieldShouldReturn:根據文檔還應該觸發textFieldDidEndEditing:,但我永遠不會看到textFieldDidEndEditing:被調用的第一個響應者狀態。

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField { 
    if (theTextField == thresholdValue) { 
     [thresholdValue resignFirstResponder]; 
    } 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    [self updateThresholdValue:textField]; 
} 

這可能是值得指出的是,我還嘗試了一些文本字段的事件連接到代表和具有事件調用updateThresholdValue:直接,但也不能工作。

+0

把一些NSLogs,以確保該方法永遠不會被調用。 – mk12 2009-08-04 16:04:19

+0

你做了myTextField.delegate = self某處正確嗎? – mk12 2009-08-04 16:06:25

+2

我假設他的代表接線正確,否則textFieldShouldReturn:不會被調用。 – 2009-08-04 16:18:58

回答

1

正如其中一條評論所述,我嘗試使用HelloWorld應用程序複製我想要做的更簡單的版本,並且它在第一次嘗試時工作,沒有問題,就像預期的那樣。面對這一點,我開始懷疑了一下。

在所有的搜索結果中,有一個地方我試圖得到這個問題的答案,我跑過了一個人遇到問題的鏈接,而這個鏈接沒有從按鈕觸發事件,結果發現問題是相關的到按鈕被放置的視圖,並且該視圖具有另一個子視圖作爲按鈕的同級,並且該子視圖以某種方式在吃事件而不是讓他們去他們被指示的地方。這種情況與我的情況不完全相同,但聽起來很接近,調查將是值得的。儘管收到了很好的建議,但都沒有成果。

昨晚我決定從頭開始完全重新創建nib文件(製作了我的第一個副本),然後讓它工作。關鍵區別似乎是,我在原始非工作nib文件中,我從調色板拖動了一個TableViewController,然後將其類型更改爲我的子類PZTableViewController。當我在新的筆尖上做同樣的事情時,事件並沒有發生。另一方面,如果我移除了拖動的TableViewController,而只是將它拖過NSObject,並將其班級更改爲PZTableViewController,並將所有內容都豎起來,這一切都「正常工作」。

我會嘗試追逐讓我開始思考這條思路的鏈接,並將其作爲編輯或評論發佈。

這也不是一個完整的答案,因爲我還不知道從調色板TableViewController和我的子類之間的區別。當我弄清楚時,我會通過編輯或評論來更新這個答案。

5

textFieldDidEndEditing在文本字段退出第一個響應者狀態時觸發,而按下返回按鈕時觸發textFieldShouldReturn。

聽起來像你的textfield永遠不會作爲firstResponder辭職。您可以通過輸入一些調試輸出(如註釋中所建議的),並通過觸摸瀏覽文本字段來輕鬆檢查它 - 例如開始輸入,然後在場外觸摸以強制它退出firstResponder。

不知道這是否有幫助,但它聽起來像是一個奇怪的情況,你打。

6

剛纔遇到了你描述的同樣的問題。嘗試後,我能想到的一切我加入此委託方法:

// if we encounter a newline character return 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // enter closes the keyboard 
    if ([string isEqualToString:@"\n"]) 
    { 
     [textField resignFirstResponder]; 
     return NO; 
    } 
    return YES; 
} 

現在textFieldShouldEndEditing火災和文本字段辭職第一響應。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 
1

我結束了接線,editingChanged記錄到一個文本字段中的每一個變化,而不是考慮如何覆蓋所有角落的情況下,其餘的回調。

由於類似於android的「可用性」的textFieldDidEndEditing(sarcasm),非常「高效」。

相關問題