当您向上或向下滚动时,选择一个 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