Я хочу удалить строку в табличном представлении, но получаю ошибку? - PullRequest
0 голосов
/ 12 ноября 2018
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath){
    let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath) as! TaskCell
    if editingStyle == .delete {
        task.remove(at: indexPath.row)
        tableView.beginUpdates()
        tableView.deleteRows(at: cell, with: .automatic)
        tableView.endUpdates()
    }
}

ошибка

Невозможно преобразовать значение типа 'TaskCell' в ожидаемый тип аргумента '[IndexPath]'

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вам нужно передать [IndexPath] вместо cell в вашем коде.

Заменить ниже в вашем коде на

tableView.deleteRows(at: cell, with: .automatic)

на

tableView.deleteRows(at: [indexPath], with: .automatic)
0 голосов
/ 13 ноября 2018

Прежде всего, вы можете добавить это расширение для просмотра таблицы и затем удалить строку, чем после того, как вам необходимо перезагрузить данные таблицы, как показано ниже,

extension UITableView {
func reloadDataAfterDelay(delayTime: TimeInterval = 0.4) -> Void {
    self.perform(#selector(self.reloadData), with: nil, afterDelay: delayTime)
}
}

Строка просмотра таблицы выглядит следующим образом.

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let repo = numberofrecord[indexPath.row]as! [String] // your datasource

    let delete = UITableViewRowAction(style: .destructive, title: "Delete", handler: {
        act,del in

            let query = "delete from repost where id=\(repo[0])"; // delete the datasource from databases.
            let s = db.dml(query: query)
            if s == true {
                print("media delete")
            }
            else{
                print("not deleted");
            }

            self.numberofrecord.remove(at: indexPath.row) // delete datasource from array.

            self.tbl.beginUpdates()
            self.tbl.deleteRows(at: [indexPath], with: .automatic) // delete row of table.
            self.tbl.endUpdates()

            self.tbl.reloadDataAfterDelay() // Reload the table after some delay.

    })

    return [delete]
}

это правильно и отлично работает в быстром темпе.

0 голосов
/ 12 ноября 2018

Вы передаете cell вместо indexPath в функцию deleteRows.

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath){
    if editingStyle == .delete {
        task.remove(at: indexPath.row)
        tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .automatic)
        tableView.endUpdates()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...