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

Posted

技术标签:

【中文标题】快速滚动ios时自定义单元格中的UITextField值出现问题【英文标题】:Issue with UITextField values in custom cell while scrolling fast ios 【发布时间】:2013-02-13 17:09:44 【问题描述】:

我有一个包含自定义单元格的简单表格,每个单元格都包含一个文本字段。在 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:placeholder: 设置单元格文本字段的文本和占位符。 performAction:forControlEvent:inTarget 直接引用 textField 并将 textField 的值保存到本地数组中,以便再次使用时准确。

当我快速滚动表格时出现问题。来自不同单元格的值复制到另一个单元格并修改本地数组。我不知道为什么会这样。有人知道吗?如果需要,我可以提供更多代码。

【问题讨论】:

【参考方案1】:

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

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

编辑

因为我不知道你的细胞是如何工作的。除了 sudo 代码概念之外,我很难给你任何东西。

这是我的 sudo 代码:

行的表格视图单元格... - 出列单元格 - [单元格 cancel_previous_action] - 设置新动作。

【讨论】:

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

以上是关于快速滚动ios时自定义单元格中的UITextField值出现问题的主要内容,如果未能解决你的问题,请参考以下文章

滚动 UITableView 时自定义单元格中的 UITextField 文本正在更改

为啥我在自定义单元格中的复选框在快速选择和滚动时显示不同的行为?

删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画

表格视图单元格中的倒数计时器在滚动后显示不同的值

编辑 tableView 时自定义单元格 imageView 移到左侧

滚动时自定义uitableviewcell空白