【问题标题】:Delete a cell from tableView inside UITableViewCell从 UITableViewCell 内的 tableView 中删除一个单元格
【发布时间】:2017-04-19 11:57:40
【问题描述】:

我有一个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 移出)。'

【问题讨论】:

  • MenuViewController().products.removeObject(forKey: "Product\(index!.row)") 这是创建一个全新的MenuViewController 对象吗?您能否检查对象是否已正确移除?

标签: swift xcode uitableview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你需要通知table view你要修改item的数量:

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

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

    您可以查看退款here

    【讨论】:

    • 不,在这种情况下您不需要begin-/ endUpdates。仔细阅读文档...如果你想要后续插入s、删除和选择操作s... 复数,表示多个操作。对于单个操作,它根本不需要。
    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多