当您向上或向下滚动时,选择一个 UITableViewCell 会选择同一位置的其他单元格

Posted

技术标签:

【中文标题】当您向上或向下滚动时,选择一个 UITableViewCell 会选择同一位置的其他单元格【英文标题】:Selecting one UITableViewCell selects the other cells at that same position when you scroll up or down 【发布时间】:2013-10-08 15:28:44 【问题描述】:

我有一个带有动态原型的 UITableView。 我实现了下面的代码,这样当我选择一行时,它将被标记,而之前选择的行将被取消标记。 但是,例如,我选择的行显示在屏幕中间,然后当我向上或向下滚动时,另一个单元格(位于屏幕中间位置)被标记。简而言之,每一个视图,中间都有一个选中的单元格。 请指教。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

    NSIndexPath *oldIndexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView cellForRowAtIndexPath:oldIndexPath].accessoryType = UITableViewCellAccessoryNone;
    [self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    return indexPath;

【问题讨论】:

显示您的 cellForRowAtIndexPath 代码 【参考方案1】:

您可能在 cellForRowAtIndexPath 方法中覆盖了附件类型 - 每次表即将绘制之前不可见的新行时都会调用此方法(正如您在向上/向下滚动时所描述的那样)。

您还需要在该函数中处理它并在那里更新附件类型 - 否则它将随机重用具有不同附件类型的单元格。

【讨论】:

【参考方案2】:

您只是在修改单元格的视觉效果,而不是更新数据模型。将选定的索引路径存储在@property 某处,并在cellForRowAtIndexPath 中调整accessoryType

【讨论】:

以上是关于当您向上或向下滚动时,选择一个 UITableViewCell 会选择同一位置的其他单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 UIPickerView 中使用自定义视图时突出显示选择和自动向上/向下滚动

UITableView,如何修复页脚,使其在滚动时永远不会向上或向下移动?

向下滚动以逐渐隐藏菜单栏或视图并向上滚动

向下滚动时隐藏的 Flutter TabBar 和 SliverAppBar

React - 向下滚动时向上滑动固定导航栏,向上滚动时向下滑动

单击向上或向下按钮时滚动div内容[重复]