programmatically select all cells in tableview so next time they are pressed they call didDeselect

一曲冷凌霜 提交于 2019-12-24 01:54:55

问题


I have a table view with a bunch of different sections and dynamic number of rows in each section. In the very first section I have a cell to 'select all'. Is there a quick and easy way to manually select all the cells, so the code in their didSelect triggers and next time the user presses one of the cells it triggers their didDeselect? The only way I can think of right now is to loop through all the sections, and in each section loop through 0 < indexPath.row < section's data array count and call

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

but is there a way to do it without so much looping?


回答1:


No; there is no way to do it without looping. You can make it a little easier on yourself by extending UITableView with a method to do it for you. This should do it:

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)
            }
        }
    }

}

Just add that to any of your Swift files at root level and then you can call tableView.selectAll() on any UITableView.




回答2:


NSTableView has a selectAll method.



来源:https://stackoverflow.com/questions/43746664/programmatically-select-all-cells-in-tableview-so-next-time-they-are-pressed-the

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!