我有两个部分在我的表视图和有多重选择为真。
如果我在第一部分中选择第一个单元格,然后向下滚动,那么第二部分的第一个单元格已经被选中,并且在某些随机滚动上被无序移动。
另外,我没有在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/

10-09 18:31