我有两个部分在我的表视图和有多重选择为真。
如果我在第一部分中选择第一个单元格,然后向下滚动,那么第二部分的第一个单元格已经被选中,并且在某些随机滚动上被无序移动。
另外,我没有在cellForRowAt中编写任何代码来标记checkmark
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = .none
}
最佳答案
我假设您使用dequeueReusableCell(withIdentifier:)
将您的单元格放入cellForRow(at:)
假设最初在TableView中有10个可见单元格。如果您现在向上滚动,并为下一个单元格调用cellForRow(at:)
,则会创建一个新单元格(因为回收池为空),并将其添加到TableView的底部。一旦顶部的单元格从屏幕上消失,它将被添加到回收池中。如果您知道向上滚动,则再次调用cellForRow(at:)
,并在ti的一侧调用dequeueReusableCell(withIdentifier:)
。但现在不是创建新单元格,而是将下一个单元格从回收池中取出,并将此单元格添加到底部。
如果不更改属性的值,它将在将属性添加到回收池之前保留这些值。
您应该将prepareForReuse()
子类的UITableViewCell
中的单元格重置为默认值,或者检查并设置cellForRow(at:)
中的所有值
关于ios - TableView AccessoryType选中标记随机播放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44031923/