2009-09-16 67 views
0

我在桌面視圖中添加了幾個單元格,每個單元格都有一個右邊的textField讓用戶輸入文本。我發現,當我向下滾動並返回時,前幾行的輸入將消失。有人知道有什麼問題嗎?UITableViewCell中的文本向下滾動時丟失

下面是一張我的代碼:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath 
    *)indexPath 
     { 
      //init cell 
      static NSString *TableIdentifier = @"MyIdentifier"; 
      UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableIdentifier]; 
      if(cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
             reuseIdentifier:TableIdentifier] autorelease]; 
      } 

      //set cell for each row 
      if([indexPath row] == 0) 
      { 
       cell.textLabel.text = @"Row A"; 
       txt_A = [self CreateTextField];   //create textField 
       [cell.contentView addSubview:txt_A];  //add textField to cell 
      } 
      else if([indexPath row] == 1) 
      { 
       cell.textLabel.text = @"Row B"; 
        txt_B = [self CreateTextField]; 
        [cell.contentView addSubview:txt_B]; 
      } 
      else{...} } 

回答

3

你的意思是用戶輸入會消失嗎?如果是這樣,這可能是因爲cellForRowAtIndexPath:重複使用該單元格,並將再次執行[self CreateTextField]

因此,除非您在單元格消失之前存儲用戶輸入,否則您的單元格將被重新繪製爲空並重新初始化爲空。

如果確實存儲了用戶輸入,則可以使用正確的用戶輸入重新初始化單元。

+0

我該如何避免讓用戶重新創建文本字段? – 2009-09-16 10:39:10

+2

當在文本字段中插入輸入時(或單元格消失時),可以將用戶輸入存儲在數組中,並將行號作爲索引。當單元格被創建時(在你當前的代碼中),你可以檢查是否有一個數組條目的行號作爲索引。如果存在,則使用存儲的文本初始化文本字段,如果沒有初始化空字段。 – Jake 2009-09-16 11:32:08

+0

感謝MiRAGe ...這幫了很多! – iwasrobbed 2010-05-08 22:09:53

1

我相信,當一個細胞離開屏幕(由於滾動)的iPhone立即釋放它以節省內存(從而失去用戶輸入)。現在,當你滾動回來了,它創建了在老位置的新的UITextField一個新的細胞與

[self CreateTextField]; 

你必須單獨存儲每個文本字段的用戶輸入。例如,您可以成爲文本字段的代理人並捕獲

- (BOOL)resignFirstResponder 

當用戶離開文本字段焦點時將收到通知。此時,您可以假定用戶已完成此特定字段並將其存儲。

1

您可以使用方法來保存用戶輸入:

- (void)textFieldDidEndEditing:(UITextField *)textField 

這種方法稱爲然後用戶端中編輯字段。例如,將用戶輸入保存到數組中。