从UITableViewCell中的tableView中删除一个单元格

时间:2017-04-19 11:57:40

标签: swift xcode uitableview

我有一个UITableViewCell和一个BEMCheckBox,我想在按下确定的点击时删除单元格,这是我的代码:

func didTap(_ checkBox: BEMCheckBox) {
    let index = tableView?.indexPath(for: self)
    MenuViewController().products.removeObject(forKey: "Product\(index!.row)") // removes the cell from the database of the tableview
    tableView?.deleteRows(at: [index!], with: .fade)
}

以下是我获取tableView的方法:

extension UIView {
    func parentView<T: UIView>(of type: T.Type) -> T? {
        guard let view = self.superview else {
            return nil
        }
        return (view as? T) ?? view.parentView(of: T.self)
    }
}

extension UITableViewCell {
    var tableView: UITableView? {
        return self.parentView(of: UITableView.self)
    }
}

我得到了以下错误:

  

因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(2)必须等于行数在更新(2)之前包含在该部分中,加上或减去从该部分插入或删除的行数(插入0,删除1)并加上或减去移入或移出该部分的行数(0移入,0搬出去。'

2 个答案:

答案 0 :(得分:0)

它与您的数据源相关。您的数据源未相应更新。您应该在重新加载UITableview之前检查您的数据源。它是由于数据项计数不匹配而发生的。

答案 1 :(得分:0)

您需要通知表视图您即将修改项目数:

tableView?.beginUpdates()
// Perform the item and cell removal
tableView?.endUpdates()

始终确保在数据源中插入/删除与表视图的单元格数相同数量的项目。

您可以查看decoumentation here