如何单击关闭按钮

时间:2019-02-17 07:40:46

标签: ios swift uitableview uitableviewsectionheader

我有一个数组,需要单击标题为UIButton的“关闭”按钮来添加和删除单元格数据

我正在循环数组并获取行,对于该节,我使用了静态数据并在

之后附加到indexPaths中
tblSideNav.deleteRows(at: indexPaths, with: .fade) 

在上述行开始执行应用时发生崩溃

 var menusArray = [sideNavStruct(isOpend: true, menuImg: "user", menuTitle: "Profile", subMenu: ["My Profile", "Distributor Profile"]), sideNavStruct(isOpend: true, menuImg: "user", menuTitle: "Reports", subMenu: ["Stock Report", "NFR Report", "RTD”])]

    @objc func handleOpenCloseCell() {
    let section = 0
    var indexPaths = [IndexPath]()
    for row in menusArray[section].subMenu.indices {
        let indexPath = IndexPath(row: row, section: section)
        indexPaths.append(indexPath)
    }
    print(indexPaths.count)
    print(menusArray[section].subMenu[0])
    menusArray[section].subMenu[0].removeAll()
    tblSideNav.deleteRows(at: indexPaths, with: .fade)
}

我的应用在tblSideNav.deleteRows(at: indexPaths, with: .fade)上崩溃了:

  

无效更新:第0节中的无效行数。   更新(7)之后现有部分中包含的行必须是   等于该部分之前包含的行数   更新(2),加上或减去从中插入或删除的行数   该部分(插入0,删除2),加上或减去   行移入或移出该部分(移入0,移出0)。

我找不到问题

1 个答案:

答案 0 :(得分:0)

首先,您要调用deleteRows而不需要必需的beginUpdates和endUpdates。

tableView.beginUpdates()
tableView.deleteRows(at: indexPaths, with: .fade)
tableView.endUpdates()

如果您的委托函数在更新后未返回正确的行数,则可能会发生相同的错误。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return rowCount
}

我认为更好的做法是更改/清空存储行信息/数据的位置的变量,并只需调用reloadData()。