deleteSections仅删除最后一部分

时间:2019-04-07 20:40:33

标签: swift uitableview

我有一个包含三个部分的静态表视图

第1节包含1行

第2节包含1行

第3节包含2行

我在第1节中有一个UISwitch,通过更改它,应该删除第2节或插入

因为我有静态表,所以我只添加了numberOfSections协议 另外,我还创建了一个节名称数组,仅用于计数节的数量,仅此而已。

override func numberOfSections(in tableView: UITableView) -> Int {
    if exportDataSwitch.isOn {
        return sections.count - 1
    } else {
        return sections.count
    }
}

在开关打开或关闭后将要调用的函数中,我编写了这些代码

@objc func switchStateDidChange(_ sender: UISwitch) {
     if exportDataSwitch.isOn {
        tableView.beginUpdates()
        tableView.deleteSections([1], with: .fade)
        tableView.endUpdates()
     } else {
        tableView.beginUpdates()
        tableView.insertSections([1], with: .fade)
        tableView.endUpdates()
        }
    }

问题是,当我想删除第2部分([1])时,出现此错误

Thread 1: signal SIGABRT

但是当我要删除最后一节(第3 [2]节)时,它可以完美地工作。

我听说我必须先删除该部分中的数据,但是当它删除最后一个部分时,我没有删除任何数据,并且工作正常。 你能帮我吗?非常感谢

1 个答案:

答案 0 :(得分:0)

您确实需要从dataSource中删除这些部分。该表将再次使用与数组中提供的相同的部分进行构造,但是如果删除其中的一部分,则数学运算不会累加。

此外,这里不需要package com.meti.app; import javafx.application.Application; import javafx.stage.Stage; /** * @author SirMathhman * @version 0.0.0 * @since 4/5/2019 */ //Main MUST remain public in order for JavaFX Application to start. public class Main extends Application { static InfinityImpl implementation = new Infinity(); static Main instance; @Override public void start(Stage primaryStage) { instance = this; implementation.start(primaryStage); } @Override public void stop() { implementation.stop(); instance = null; } public static void main(String[] args) { launch(args); } } beginUpdates(),但在执行多个更新时会使用它们。

endUpdates()