我有一个dataSource检查来定义cellHeightForRowAt委托
所有代码都可以在添加单元格的情况下正常工作,但不能删除
这是我的代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.dataSource.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if self.dataSource[indexPath.row].isExclusive {
return 280.0
}
else {
return 150.0
}
}
fileprivate func handleCellDeletion(cell: UITableViewCell) {
let cellIndexPath = self.paymentMethodTableView.indexPath(for: cell)
guard let indexPath = cellIndexPath else { return }
self.dataSource.remove(at: indexPath.row)
self.paymentMethodTableView.beginUpdates()
self.paymentMethodTableView.deleteRows(at: [indexPath], with: .fade)
self.paymentMethodTableView.endUpdates()
}
现在,问题是每当删除一个单元格时,它将再次运行heightForRowAt委托,并且这行代码将使索引超出范围异常
if self.dataSource[indexPath.row].isExclusive { // <== this will throw exception
我注意到,即使我已经在reloadingRows之前删除了dataSource数组中的索引,但indexPath.row仍然以某种方式反映了删除之前的总行数
任何人都可以引导我吗?我在这里想念什么?谢谢
答案 0 :(得分:-1)
您无需致电beginUpdates()
和endUpdates()
fileprivate func handleCellDeletion(cell: UITableViewCell) {
let cellIndexPath = self.paymentMethodTableView.indexPath(for: cell)
guard let indexPath = cellIndexPath else { return }
self.dataSource.remove(at: indexPath.row)
self.tableView.reloadData()
}