Подтвердить что ты не робот

Удаление строки из UITableView в Swift 3?

Я новичок в кодировании и учебе быстро, я следую учебному курсу для быстрого 2 и работаю с быстрым 3, поэтому есть несколько проблем, которые у меня есть, когда я следую за ним, и это то, что я правильно застрял.

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

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

    let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (rowAction: UITableViewRowAction, indexPath: IndexPath) -> Void in

        print("Deleted")

        self.catNames.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
        self.tableView.reloadData()
    }
4b9b3361

Ответ 1

Работает для Swift 3 и Swift 4

Используйте метод UITableViewDataSource tableView(:commit:forRowAt:), см. также этот ответ здесь:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
  if editingStyle == .delete {
    print("Deleted")

    self.catNames.remove(at: indexPath.row)
    self.tableView.deleteRows(at: [indexPath], with: .automatic)
  }
}

Ответ 2

Сначала вам нужно добавить эту функцию

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true 
}

тогда ваша функция в порядке, но нет необходимости в перезагрузке данных таблицы, просто вызовите tableview.beingUpdates и tableview.endUpdates

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
       print("Deleted")
       self.catNames.remove(at: indexPath.row)
       self.tableView.beginUpdates()
       self.tableView.deleteRows(at: [indexPath], with: .automatic)
       self.tableView.endUpdates() 
    }
}

Ответ 3

В Swift 4 Попробуйте это

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    func tableView(_ tableView: UITableView, commit editingStyle:   UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if (editingStyle == .delete) {
            arrStudentName.remove(at: indexPath.row)
            tableView.beginUpdates()
            tableView.deleteRows(at: [indexPath], with: .middle)
            tableView.endUpdates()
        }
    }

Ответ 4

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        self.animals.remove(at: indexPath.row)

        self.dataDisplayTbleView.reloadData()
    }

}

Ответ 5

Мой ответ для вас

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
{
     return true
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
{
    if editingStyle == .delete
    {
        array.remove(at: indexPath.row)
        tblDltRow.reloadData()
    }
}

Вам нужно обновить таблицу

Ответ 6

**

для быстрого 3

**

  func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
      if editingStyle == .delete {
        print("Deleted")

        self.catNames.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: .automatic)
      }
    }

Ответ 7

    self.tableView.beginUpdates()
    self.tableView.deleteRows(at: [ IndexPath(row: index, section: section) ], with: .fade)
    self.remove_object_from_model()
    self.tableView.endUpdates()