Swift 以编程方式选择tableview中的所有单元格,以便下次按下这些单元格时调用“取消选择”

Swift 以编程方式选择tableview中的所有单元格,以便下次按下这些单元格时调用“取消选择”,swift,uitableview,swift3,didselectrowatindexpath,Swift,Uitableview,Swift3,Didselectrowatindexpath,我有一个表视图,其中有一堆不同的部分,每个部分中有动态的行数。在第一部分中,我有一个“全选”单元格。是否有一种快速简便的方法来手动选择所有单元格,以便其didSelect中的代码触发,下次用户按下其中一个单元格时,它会触发其didSelect?我现在能想到的唯一方法是循环所有的部分,在每个部分中循环0

我有一个表视图,其中有一堆不同的部分,每个部分中有动态的行数。在第一部分中,我有一个“全选”单元格。是否有一种快速简便的方法来手动选择所有单元格,以便其
didSelect
中的代码触发,下次用户按下其中一个单元格时,它会触发其
didSelect
?我现在能想到的唯一方法是循环所有的部分,在每个部分中循环
0
并调用

self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)

但是有没有一种方法可以在没有这么多循环的情况下完成呢?

NSTableView有一个
selectAll
方法。

;没有循环就没有办法做到这一点。通过使用一种方法扩展
UITableView
,您可以让自己更轻松一些。这应该做到:

extension UITableView {

    func selectAll(animated: Bool = false) {
        let totalSections = self.numberOfSections
        for section in 0 ..< totalSections {
            let totalRows = self.numberOfRows(inSection: section)
            for row in 0 ..< totalRows {
                let indexPath = IndexPath(row: row, section: section)
                // call the delegate's willSelect, select the row, then call didSelect
                self.delegate?.tableView?(self, willSelectRowAt: indexPath)
                self.selectRow(at: indexPath, animated: animated, scrollPosition: .none)
                self.delegate?.tableView?(self, didSelectRowAt: indexPath)
            }
        }
    }

}
扩展UITableView{ func selectAll(动画:Bool=false){ 设totalSections=self.numberOfSections 对于0..
只需将其添加到根级别的任何Swift文件中,然后就可以在任何
UITableView

上调用
tableView.selectAll()
,这是关于iOS和
UITableView
。跟踪数据源中每个单元格的选定状态不是更好吗?您不应该自己调用
didSelectRowAt
。这是为了让你知道用户做了什么。当您显式调用
selectRow
时,这是毫无意义的,因为您已经知道该行已被选中。非常棒的解决方案,在Swift 5中工作得很好谢谢