Первый пост ...
Запуск небольшого приложения с табличным представлением Aircraft, которое, когда я смахиваю, чтобы удалить последнюю запись, приложение вылетает из-за несоответствия количества строк. Запись также не удаляется из Realm. Я пытаюсь использовать trailingSwipeActionsConfigurationForRowAt, поскольку это «более новый» способ делать что-то и можно добавить более одного действия (у меня также есть действие Edit).
Если я закомментирую self.tableView.deleteRows(at: [indexPath], with: .fade)
, все работает . Я просто пытаюсь вставить эту команду deleteRows, чтобы анимация выглядела лучше. При удалении только Realm он просто отделяет строку (не плавно). ИЛИ есть лучший способ сделать анимацию красивее? Код ниже ...
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
UISwipeActionsConfiguration(actions:
[makeDeleteContextualAction(forRowAt: indexPath),
makeEditContextualAction(forRowAt: indexPath)])
}
func makeEditContextualAction(forRowAt indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .normal,
title: "Edit",
handler: { (contextualAction: UIContextualAction, swipeButton: UIView, completionHandler: (Bool) -> Void) in
print("Hit the EDIT...")
})
action.backgroundColor = .systemYellow
return action
}
func makeDeleteContextualAction(forRowAt indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .destructive,
title: nil)
{ (contextualAction: UIContextualAction, swipeButton: UIView, completionHandler: (Bool) -> Void) in
if let aircraftToDelete = self.aircraftResults?[indexPath.row] {
do {
try self.aircraftRealm.write {
self.aircraftRealm.delete(aircraftToDelete)
//self.tableView.deleteRows(at: [indexPath], with: .fade) // Only to make delete look smooth
}
} catch {
print("Error deleting data... \(error)")
}
}
self.loadAircraft()
completionHandler(true)}
action.image = UIImage(systemName: "trash")
action.backgroundColor = .systemRed
return action
}
Затем он берет данные из Realm и перезагружает таблицу ...
func loadAircraft() {
aircraftResults = aircraftRealm.objects(Aircraft.self)
tableView.reloadData()
}
Спасибо за помощь ... Скотт