Как сделать функцию отмены в ячейке таблицы?

У меня проблемы с работой кнопки отмены. Я пытаюсь получить его там, где, если вы нажмете кнопку удаления в ячейке таблицы, отмена может снова войти в ячейку.

Моя отмена:

@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()
}
Другие вопросы по тегам