以编程方式选择tableview中的所有单元格,以便下次按下它们时调用didDeselect

时间:2017-05-02 20:26:25

标签: swift uitableview swift3 didselectrowatindexpath

我有一个表视图,其中包含一系列不同的部分和每个部分中的动态行数。在第一部分中,我有一个单元格来“全选”。是否有一种快速简便的方法来手动选择所有单元格,因此config.paperclip_defaults = { url: ":s3_domain_url", path: "/:class/:attachment/:id_partition/:style/:filename", storage: :s3, s3_protocol: 'http', s3_credentials: { bucket: ENV.fetch('S3_BUCKET_NAME'), access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), s3_region: ENV.fetch('AWS_REGION'), } } 中的代码会触发,下次用户按下其中一个单元格时会触发didSelect?我现在能想到的唯一方法是循环遍历所有部分,并在每个部分循环遍历didDeselect并调用

0 < indexPath.row < section's data array count

但有没有办法在没有这么多循环的情况下做到这一点?

2 个答案:

答案 0 :(得分:1)

;没有循环就没有办法做到这一点。您可以通过使用方法扩展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)
            }
        }
    }

}

只需将其添加到根级别的任何Swift文件中,然后就可以在任何tableView.selectAll()上调用UITableView

答案 1 :(得分:0)

NSTableView有selectAll方法。