向上滚动后删除TableView CheckMark单元格值将修复TableView,向上滚动然后向下滚动后,您将多次遇到Checkmark的问题,将显示Checkmark单元格将被删除,因为单元格为dequeueReusableCell,因此,此问题解决方法是您刚将您的代码并解决了您的问题。 任何其他帮助,请发送按摩。非常感谢。:)
向上滚动后删除TableView CheckMark单元格值将修复TableView,向上滚动然后向下滚动后,您将多次遇到Checkmark的问题,将显示Checkmark单元格将被删除,因为单元格为dequeueReusableCell,因此,此问题解决方法是您刚将您的代码并解决了您的问题。
任何其他帮助,请发送按摩。非常感谢。:)
class ViewController: UIViewController , UITableViewDataSource , UITableViewDelegate{ var temp = [Int]() var numarr = [Int]() func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return numarr.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "id") cell = UITableViewCell.init(style: .default, reuseIdentifier: "id") cell?.textLabel?.text = String(numarr[indexPath.row]) if temp.contains(numarr[indexPath.row] as Int) { cell?.accessoryType = .checkmark } else { cell?.accessoryType = .none } return cell! } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) if temp.contains(numarr[indexPath.row] as Int) { cell?.accessoryType = .none temp.remove(at: temp.index(of: numarr[indexPath.row])!) } else { cell?.accessoryType = .checkmark temp.append(self.numarr[indexPath.row] as Int) } } override func viewDidLoad() { super.viewDidLoad() for i in 1...100 { numarr.append(i) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }
我认为,如果有人要运行您的代码,则不会显示任何错误。但是如果有真实数据,它可能会。的 原因 是 存储您的选中标记方式 。您temp应该在存储数组的实际值时将一行的数据存储indexPath到数组中,以便 只有该行才具有选中标记 。在您的情况下,如果一行1内有标签,然后单击它,则该单元格将突出显示。现在,如果您开始滚动并且包含另一个单元格,1则该行也将突出显示。
temp
indexPath
1
对于单节,我已经修改了您的示例。如果有多个部分,则需要存储indexPath而不是indexPath.row。
indexPath.row
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: "id") cell = UITableViewCell.init(style: .default, reuseIdentifier: "id") cell?.textLabel?.text = String(numarr[indexPath.row]) if temp.contains(indexPath.row) { cell?.accessoryType = .checkmark } else { cell?.accessoryType = .none } return cell! } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) if temp.contains(indexPath.row) { cell?.accessoryType = .none temp.remove(at: indexPath.row) } else { cell?.accessoryType = .checkmark temp.append(indexPath.row) } }