Как мгновенно обновить значение tableView при вызове метода SwipeToDelete для ячейки TableView? - PullRequest
1 голос
/ 12 февраля 2020

Когда я выполняю swipeToDelete ячейка, анимация удаления является правильной, но значение индекса ячейки не обновляется при удалении, пока я не прокручиваю tableView вне поля зрения и снова прокручиваю его обратно в представление, только тогда данные изменение значения внутри текстового поля ячейки

Также, если я добавлю внутрь метод tableView.reloadData(), он корректно обновляет значение ячейки, но искажает анимацию удаления (анимация выполняется очень быстро). Как я могу это исправить?

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        try! realm.write {
            tableView.beginUpdates()
            self.realm.delete((self.selectedExercise?.wsr[indexPath.row])!)
            tableView.deleteRows(at: [indexPath], with: .automatic)
            tableView.endUpdates()
        }
    }
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = historyTableView.dequeueReusableCell(withIdentifier: "historyCell", for: indexPath)
        let wsr = selectedExercise?.wsr[indexPath.row]

        cell.textLabel?.text = "Set \(indexPath.row + 1)   \(wsr!.weight.removeZerosFromEnd()) lbs - \(wsr!.reps.removeZerosFromEnd()) Reps"
        return cell
    }

1 Ответ

1 голос
/ 12 февраля 2020

Все, что вам действительно нужно сделать, это перезагрузить все ячейки, которые находятся на ie за пределами ячейки, которую вы удаляете. Таким образом, вы можете сделать что-то вроде этого:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

    guard let selectedExercise = selectedExercise else { return }

    if editingStyle == .delete {

        var refreshIndexPaths: [IndexPath] = []
        for i in indexPath.row+1..<selectedExercise.wsr.count {
            refreshIndexPaths.append(.init(row: i, section: indexPath.section))
        }
        try! realm.write {
            self.realm.delete((self.selectedExercise.wsr[indexPath.row])!)
        }

        tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .fade)
        tableView.reloadRows(at: refreshIndexPaths, with: .fade)
        tableView.endUpdates()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...