Всем привет! Продолжая темы Как достать значения из ячеек для viewForHeaderInSection и Передать значение в массив для tableView , у меня есть вопрос про удаление секций в tableView. Секции строятся в зависимости от магазина. Итого, в нашей “корзине” есть товар, распределенный по секциям.
Встал вопрос как удалять секции? Для удаления ячейки:
let deletedOffer = self.purchasesViewModel[indexPath.section].offers!.remove(at: indexPath.row)
dataSource.setCount(count: 0, buttonType: .delete, id: deletedOffer.id!, isBought: deletedOffer.isBought!)
self.tableView.deleteRows(at: [indexPath], with: .left)
Метод setCount - это .POST запрос на удаление с БД сервера одного “Offer”. Там все отрабатывает как надо. Собственно, ячейка также удаляется как надо. Только единственный момент - мне необходимо использовать tableView.reloadData(), так как в section header есть информация по суммарной цене и ее тоже надо обновить. Но анимация удаления сразу же становится какой-то “кривой”. Она дёрганная. Может, есть какой-то вариант это исправить?
Но, это вторично. Главный момент -
Когда в секции остается один товар и его тоже удаляют, необходимо также удалить и секцию. Делаю я это так, но почему-то удаляются ячейки из соседней секции.
if purchasesViewModel[indexPath.section].offers?.count == 1 {
self.purchasesViewModel[indexPath.section].offers!.remove(at: indexPath.row)
self.purchasesViewModel.remove(at: indexPath.section)
let indexSet = IndexSet(arrayLiteral: indexPath.section)
tableView.deleteSections(indexSet, with: .left)
self.tableView.reloadData()
}
Как правильно удалять секцию?
На StackOverflow нашел, что при использовании метода remove(at: Int)
, нужно писать at: indexPath.section - 1
. Но если я так сделаю, то выдаст ошибку Index out of range.
Все это я делаю в методе func tableView( _ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)