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中工作得很好谢谢