我对使表格视图部分展开/折叠有疑问。网络上有很多有关该主题的信息,但是我的问题有点不同。
我的问题是,当用户点击另一个部分时,如何创建一个附加部分?
以下图片可以帮助您了解我的情况。
在表格视图的顶部,我们有一个小节(第0节)。
如果我点击它...
第1节和第2节应该在第0节和第3节之间创建。
我该怎么做?有什么办法或代码吗?请帮助我。
此外,我尝试了这段代码,但收到了sigabrt错误:(
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.tableView.beginUpdates()
let indexSet = NSMutableIndexSet()
indexSet.add(indexPath.section + 1)
indexSet.add(indexPath.section + 2)
if indexPath.section == 0 {
if expandCol == true {
self.tableView.deleteSections(NSIndexSet(index: 1) as IndexSet, with: .automatic)
self.tableView.deleteSections(NSIndexSet(index: 2) as IndexSet, with: .automatic)
expandCol = !expandCol
} else {
self.tableView.insertSections(NSIndexSet(index: 1) as IndexSet, with: .automatic)
self.tableView.insertSections(NSIndexSet(index: 2) as IndexSet, with: .automatic)
expandCol = !expandCol
}
}
self.tableView.endUpdates()
self.tableView.reloadData()
}
答案 0 :(得分:0)
您可以在{@ {1}}的视图控制器上保留一个标志变量。
selectedSection
在节标题操作方法中设置标志值:
var selectedSection: Int = -1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == selectedSection ? <section-row-count> : 0
}
答案 1 :(得分:0)
要将新部分添加到UITableView
中,您需要
1-更新数据。例如,将您的部分插入数据数组中,或更改其可见性标志。
2-调用以下方法。
tableView.insertSections([1, 2], with: .automatic)
或
tableView.reloadData()
第一种方法将使用动画更新UITableView
。第二个将立即更新。为了获得更好的用户体验,我建议您使用第一个。
更新您的代码
首先,您可以使用一个简单的数组一次传递所有节的索引。这样
if expandCol {
self.tableView.deleteSections([1, 2], with: .automatic)
} else {
self.tableView.insertSections([1, 2], with: .automatic)
}
expandCol = !expandCol
第二个问题是您在调用表格的动画更新后正在调用reloadData
。
最重要的是,您需要更改数据。您UITableView
有一个dataSource
,它返回了许多节和单元格。用户与触发单元交互后,您需要在调用更新之前对该数据进行更改。