Я использую метод делегата trailingSwipeActionsConfigurationForRowAt
UITableView
для обработки, когда пользователь проводит пальцем, чтобы удалить определенную ячейку (элемент).
Мой UIContextualAction
для событие удаления выглядит следующим образом. Сначала я удаляю элемент из базы данных Realm, а затем удаляю строку из представления таблицы
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .destructive, title: nil) { _,_,_ in
Repository.shared.deleteItem(self.items![indexPath.row])
tableView.deleteRows(at: [indexPath], with: .fade)
}
...
}
Но по какой-то причине, когда я удаляю ячейку, она не удаляется сразу, а возвращается в положение между пролистыванием. Затем, когда я прокручиваю табличное представление, ячейка исчезла, как вы можете видеть в GIF ниже:
![enter image description here](https://i.stack.imgur.com/vCoOU.gif)
Я могу «исправить» это, перезагрузив данные табличного представления сразу после удаления определенного элемента из базы данных, но это не то, что я хочу, я хочу использовать deleteRow(at:with:)
из-за анимации.
Одно из предположений заключается в том, что это связано с удалением элемента из базы данных Realm.
Я удаляю элемент, используя delete
метод
func deleteItem(_ item: Item) {
do {
try realm.write {
realm.delete(item)
}
} catch {
print(error)
}
}
затем в качестве массива источника данных для моего представления таблицы я использую Realm's Results
var items: Results<Item>?
Кто-нибудь знает, почему это происходит? Спасибо.