Реализация удаления по свайпу в TableView

swift
tableview

#1

Всем привет!

Планомерно прохожу курсы и в 18 уроке по Delete Action ( Приложения На Основе UITableView) столкнулся с методом UITableViewRowAction, который упразднен в iOS 13.0.

Вроде бы разобрался что надо заменить на UIContextualAction, и даже код компилится, но появилась непонятные баги с отображением ячеек, т.е. после удаления строки, открываешь соседнюю строку, а там данные другой строки(ниже иллюстрация). Подозреваю, что происходит смещение IndexPath и из-за этого открывается другая строка.

Подскажите как можно решить проблему?

// старый кусок кода из урока где все работало корректно ( метод депрекейтед)

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    
    let place = places[indexPath.row]
    let deleteAction = UITableViewRowAction(style: .default, title: "Delete") { (_, _) in
        
        StorageManager.deleteObject(place)
        tableView.deleteRows(at: [indexPath], with: .automatic)
    }
    
    return [deleteAction]
}

//Обновленный код где происходят баги.

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    
    let place = places[indexPath.row]
    
    let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { _, _, complete in
        StorageManager.deleteObject(place)
        tableView.deleteRows(at: [indexPath], with: .automatic)
        complete(true)
    }
    let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
           configuration.performsFirstActionWithFullSwipe = true
           return configuration
}


#2

Я не уверен, но может стоит сделать релоад?!


#3

Увы, перезапуск xcode, компа, чистка DerivedData, запуск на устройстве не помогает, гугл тоже, может не туда копаю конечно…


#4

Я имел ввиду таблицы))

tableView.reloadData, после того как удалили элемент из таблицы


#5

блин, все настолько элементарно) спасибо добрый человек)


#6

У меня аналогичный вариант кода, за исключением отсутствия пары строк. Но такого бага не замечал. И обновления вроде не делаю.

    override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    
    let place = places[indexPath.row]
    let deleteAction = UIContextualAction(style: .destructive, title: "Удалить") {  (contextualAction, view, boolValue) in

        StorageManager.deleteObject(place)
        tableView.deleteRows(at: [indexPath], with: .automatic)
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [deleteAction])

    return swipeActions
}