2010-02-22 37 views
6

我在tableViewCell中有一個textField。我最近注意到,如果我在文本框中輸入一個值,然後從屏幕上滾動單元格,文本框中的值就會消失。iPhone - 在tableViewCell中的textField - 滾動關閉屏幕清除值

我有一個防範措施。如果沒有UIKeyboard存在,則tableView不能滾動得足夠遠以至於不得不重繪單元格。但是,有些用戶不使用鍵盤上的完成鍵來使鍵盤消失,而是將表格向上滾動,從而中斷程序。

有沒有辦法立即將textField字符串存儲到一個變量,或保持tableView滾動,或者如果用戶試圖滾動tableView使鍵盤消失?

我沒有這個視圖的NIB文件,它是一個程序化的tableViewController,所以我不能在Interface Builder中用不可見的自定義按鈕做任何事情,就像在StackOverflow的其他問題中所建議的那樣。

回答

5

你是否正在實例化cellForRowAtIndexPath :: method中的文本字段?如果是這樣,它可能會重新實例化每次單元格滾動查看。

應保存您的控制器上的文本字段的引用和你的cellForRowAtIndexPath ::

+0

我使用case語句塊將textField添加到Section 0的第2行.textField在頭中作爲指針聲明,因此可以使用myTextField.text訪問屬性。 這有幫助嗎? – Justin 2010-02-22 21:55:28

+0

我不太關注。你是否在你的cellForRowAtIndexPath方法中說你有一個case語句來決定你是否在Section 0,Row 2,如果是,它會添加文本字段? 如果是這樣,你在哪裏調用[[UITextField alloc] init]?如果它也在cellForRowAtIndexPath方法中,那麼每次行滾動到視圖中時(或者調用cellForRowAtIndexPath),您可能會重新初始化文本字段。 嘗試在loadView或控制器的主init方法中初始化文本字段。 – chrissr 2010-02-22 22:12:07

0

回答這個問題是實現了滾動委託方法willBeginDragging重用。 UITableView從UIScrollView繼承。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; 
     [textField resignFirstResponder]; 
} 

這隻要開始的tableView滾動

通過這種繼承駁回鍵盤,也可以從滾動,期間保持的tableView。在scrollEnabled屬性設置爲NO,一拉

self.tableView.scrollEnabled = NO; 
0

您應該設置的委託NSTextField創建到控制器,然後實現在您的控制器textField:shouldChangeCharactersInRange:replacementString:,讓你通知隨時在文本字段的變化。

當文本更改時,將更改的文本存儲在控制器的屬性中。

cellForRowAtIndexPath中創建NSTextField時,請設置該屬性的值。

請記住,與可可你需要保持你的模型數據與你的看法分開。

+0

但是當textField向上滾動時會發生什麼情況,並且值被刪除。實例變量是否也會失去它的價值? – Justin 2010-02-23 04:32:35

+0

不,委託調用textField:shouldChangeCharactersInRange:replacementString時,應該將字符串從文本字段複製到實例屬性中,以便在刪除UITableViewCell後它將有效。 – 2010-02-25 00:27:01