2013-02-13 47 views
2

我有一个简单的表格,每个表单都包含一个文本框。在的cellForRowAtIndexPath:我创建并根据indexPath.row每个单元初始化:快速滚动ios时自定义单元格中的UITextField值问题

case 0: 
{ 
    CellIdentifier = @"TextEditCell"; 
    TextEditCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
     cell = [topLevelObjects objectAtIndex:0]; 
    } 

    [cell configureCellWithText: [self.valueArray objectAtIndex:0] 
        placeholder: @"value no.0"] 

    [cell performAction: @selector(saveValue0:) 
     forControlEvent: UIControlEventEditingDidEnd 
       inTarget: self]; 

    return cell; 
} 

configureCellWithText:占位符:套文本和单元格的文本框的占位符。 performAction:forControlEvent:inTarget直接引用textField,并将textField的值保存到本地数组,以便在再次使用时保持准确。

问题发生时,我快速滚动表格。来自不同单元的值复制到另一个单元并修改本地数组。我无法找出它为什么会发生。任何人有任何想法?如果需要,我可以提供更多的代码。

回答

0

发生这种情况的原因是您正在重新使用单元格,并且configureCellWithText在单元格被重用后正在运行。要解决这个问题,您可以:

  1. 不要重复使用单元格 - 但这样会严重影响您的性能。
  2. 如果您在6.0上运行,则可以使用tableView:didEndDisplayingCell:forRowAtIndexPath:在单元格滚动屏幕时取消文本设置操作。
  3. 您可以在自定义单元类中创建一个标志,该标志在您将某个单元取出时设置。

编辑

因为我不知道你的电池的工作原理。我很难给你任何更多的sudo代码概念。

这里是我的须藤代码:

泰伯维细胞用于行... - 离队细胞 - [细胞cancel_previous_action] - 设置新的行动。

+0

选项1和2对我来说不够好。你能提供关于第三个的更多细节吗?我在我的TextEditCell类中创建了一个标志 - 我应该如何在'cellForRowAtIndexPath:'中处理它? 此外,在我的代码中,每个单元格都具有相同的CellIdentifier - 我应该为每个单元格分发它吗? 'dequeueReusableCellWithIdentifier:'中使用的CellIdentifier是否必须与'loadNibNamed:'函数中的相同? (请编辑您的原始答案 - 为下一代) – deleteme 2013-02-14 12:18:59

相关问题