I'm using trailingSwipeActionsConfigurationForRowAt
UITableView
's delegate method for handling when user swipe to delete certain cell (item).
My UIContextualAction
for delete event looks like this. I first remove item from Realm database and then I delete row from my table view
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)
}
...
}
But from some reason when I delete cell, it isn't deleted immediately and it returns to position between swipe. Then when I scroll table view, cell disappeared like you can see in gif below:
I can "fix" this by reloading data of table view right after I remove certain item from database, but this is not what I want to, I want to use deleteRow(at:with:)
because of animation.
One my guess is, that it has something to do with deleting item from Realm database.
I'm deleting item using delete
method
func deleteItem(_ item: Item) {
do {
try realm.write {
realm.delete(item)
}
} catch {
print(error)
}
}
then as data source array for my table view I'm using Realm's Results
var items: Results<Item>?
Does anybody have any idea why this happens? Thank you.