【问题标题】:Issue with UITextField values in custom cell while scrolling fast ios快速滚动ios时自定义单元格中的UITextField值出现问题
【发布时间】: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 的值保存到本地数组中,以便再次使用时准确。

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

【问题讨论】:

    标签: ios uitableview uitextfield custom-cell


    【解决方案1】:

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

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

    编辑

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

    这是我的 sudo 代码:

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

    【讨论】:

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