以编程方式选择表格视图中的所有单元格,以便下次按下它们时调用 didDeselect
Posted
技术标签:
【中文标题】以编程方式选择表格视图中的所有单元格,以便下次按下它们时调用 didDeselect【英文标题】:programmatically select all cells in tableview so next time they are pressed they call didDeselect 【发布时间】:2017-05-02 20:26:25 【问题描述】:我有一个表格视图,其中包含一堆不同的部分和每个部分中的动态行数。在第一部分,我有一个单元格可以“全选”。是否有一种快速简便的方法来手动选择所有单元格,以便其didSelect
中的代码触发,并且下次用户按下其中一个单元格时,它会触发其didDeselect
?我现在能想到的唯一方法是遍历所有部分,并在每个部分中循环通过0 < indexPath.row < section's data array count
并调用
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)
但是有没有办法在没有这么多循环的情况下做到这一点?
【问题讨论】:
跟踪数据源中每个单元格的选定状态不是更好吗? 你不应该自己打电话给didSelectRowAt
。那是为了让你知道用户做了什么。当您显式调用 selectRow
时,这是没有意义的,因为您已经知道该行已被选中。
【参考方案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 文件中,然后您就可以在任何 UITableView
上调用 tableView.selectAll()
。
【讨论】:
很棒的解决方案! ,在 Swift 5 中工作得很好谢谢【参考方案2】:NSTableView 有一个selectAll
方法。
【讨论】:
这是关于 ios 和UITableView
.以上是关于以编程方式选择表格视图中的所有单元格,以便下次按下它们时调用 didDeselect的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式动态调整多行 UILabel 和随附的表格视图单元格
以编程方式开始在另一个表格视图单元格中编辑 UITextField
以编程方式选择单元格并转到 tabbarcontroller