从Tableview中删除部分

时间:2019-04-07 16:42:11

标签: swift uitableview

我有一个开关按钮可以隐藏和显示表格视图中的部分

让我说我在数组中定义了三个部分:

var sections = ["section1", "section2", "section3"]

这是各节的表视图协议

override func numberOfSections(in tableView: UITableView) -> Int {
    return sections.count
}

这是当切换按钮的切换将改变时将要调用的函数:

@objc func switchStateDidChange(_ sender: UISwitch) {
    sections.remove(at: 1)

    // My problem is here
    tableView.deleteSections(IndexSet, with: .top)
}

在此函数中,我首先说过将节数组中的节数减少1,然后删除节1

但是如果我在IndexSet中输入1,则会出现此错误:

  

无法将类型“ Int”的值转换为预期的参数类型“ IndexSet”

如何通知tableView.deleteSections删除第1节?

3 个答案:

答案 0 :(得分:2)

您可以尝试

tableView.deleteSections([0], with: .top)

将值更改为所需的索引

答案 1 :(得分:0)

您必须从IndexSet创建一个特定的Int实例

tableView.deleteSections(IndexSet(integer: 1), with: .top)

或使用IndexPath的{​​{3}}方法来推断Int数组

tableView.deleteSections([1], with: .top)

答案 2 :(得分:0)

在更新UITableView时,您需要确保做几件事。

  • 确保已从tableView使用的数组中删除了数据

  • 请确保在更新数组时不会刷新tableView,例如,您是数组的观察者或didSet

  • 在尝试更新之前,请确保您有可用的部分

  • 告诉tableView您将要进行更新

let removeSection = 0
if tableView.numberOfSections >= removeSection+1 {
    tableView.beginUpdates()
    tableView.deleteSections([removeSection], with: .top)
    tableView.endUpdates()     
}