2009-09-16 71 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 

这种方法称为然后用户端中编辑字段。例如,将用户输入保存到数组中。