Как сделать функцию отмены в ячейке таблицы?
У меня проблемы с работой кнопки отмены. Я пытаюсь получить его там, где, если вы нажмете кнопку удаления в ячейке таблицы, отмена может снова войти в ячейку.
Моя отмена:
@IBAction func undoBtnWasPressed(_ sender: Any) {
undoItem()
undoView.isHidden = true
}
func undoItem() {
undoManager?.registerUndo(withTarget: GoalCell.self, selector: #selector(removeGoal(atIndexPath:)), object: nil)
undoManager?.undo()
}
Мой удалить:
@objc func removeGoal(atIndexPath indexPath: IndexPath) {
guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
managedContext.delete(goals[indexPath.row])
undoView.isHidden = false
do {
try managedContext.save()
print("Successfully removed goal.")
} catch {
debugPrint("Could not save: \(error.localizedDescription)")
}
}
1 ответ
Вы можете просто сохранить данные из источника данных удаленной ячейки в свойстве или массиве и, если нажата кнопка отмены, вы повторно добавите данные в источник данных и перезагрузите строку или полные данные табличного представления.
РЕДАКТИРОВАТЬ
Так, например, в вашем примере у вас была функция удаления данных из основных данных, основанная на goals[indexPath.row]
Перед удалением сохраните содержимое из goals[indexPath.row]
в отдельный массив. Когда отменить нажмите, просто возьмите значение из отдельного массива и добавьте его обратно в goals
и добавить его обратно в основные данные.
Тогда просто сделай tableview.reloadData()
РЕДАКТИРОВАТЬ 2:
let dataSource: [CustomObject] = [Object1, Object2, Object3]
var undoSource: [CustomObject] = []
func removeRow(indexPath) {
let object = dataSource[indexPath.row]
undoSource.append(object)
dataSource.remove(object)
}
func undo() {
for object in undoSource {
dataSource.append(object)
}
tableView.reloadData()
}