通过单击TableView中的另一部分,iOS折叠/展开部分

时间:2018-09-17 13:29:06

标签: ios swift uitableview

我对使表格视图部分展开/折叠有疑问。网络上有很多有关该主题的信息,但是我的问题有点不同。

我的问题是,当用户点击另一个部分时,如何创建一个附加部分?

以下图片可以帮助您了解我的情况。

enter image description here

在表格视图的顶部,我们有一个小节(第0节)。

如果我点击它...

enter image description here

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

2 个答案:

答案 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,它返回了许多节和单元格。用户与触发单元交互后,您需要在调用更新之前对该数据进行更改。