滚动快速ios时,自定义单元格中的UITextField值出现问题

时间:2013-02-13 17:09:44

标签: ios uitableview uitextfield custom-cell

我有一个简单的表格,其中每个自定义单元格都包含一个文本字段。在 cellForRowAtIndexPath:中,我根据 indexPath.row 创建并初始化每个单元格:

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:占位符:设置单元格textField的文本和占位符。 performAction:forControlEvent:inTarget 直接引用textField,并将textField的值保存到本地数组,以便在再次使用时保持准确。

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

1 个答案:

答案 0 :(得分:0)

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

  1. 不要重复使用细胞 - 但这确实会损害你的表现。
  2. 如果您在6.0上运行,则可以在单元格滚动屏幕时使用tableView:didEndDisplayingCell:forRowAtIndexPath:取消文本设置操作。
  3. 您可以在单元格出列时设置的自定义单元格类中创建标记。
  4. 修改

    因为我不知道你的细胞是如何工作的。我很难再给你一个sudo代码概念。

    这是我的sudo代码:

    Tableview Cell for row ...   - 出列细胞   - [cell cancel_previous_action]   - 设定新的行动。