UITableView проведите пальцем для редактирования - PullRequest
0 голосов
/ 24 октября 2018

У меня есть два uitableviewcontroller, один - таблица списков, а другой - таблица редактирования.Я использую вспомогательное действие для редактирования элемента.все работает нормально.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if  segue.identifier == "EditItem" {
        let controller = segue.destination as! ItemDetailViewController
        controller.delegate = self
        if let indexPath = tableView.indexPath(for: sender as! UITableViewCell) {

            controller.itemToEdit = items[indexPath.row]
        }
    }
}

теперь я добавляю функцию свайпа для редактирования элемента

override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let edit = UIContextualAction(style: .normal, title: "Edit") { action, view, completion in
        self.performSegue(withIdentifier: "EditItem", sender: self)

        completion(true)
    }

    let delete = UIContextualAction(style: .destructive, title: "Delete") { [weak self] action, view, completion in
        self?.items.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
        self?.saveChannelListItems()
        completion(true)
    }

    edit.backgroundColor = .purple
    edit.image = #imageLiteral(resourceName: "edit")
    delete.backgroundColor = .red
    delete.image = #imageLiteral(resourceName: "delete")


    return UISwipeActionsConfiguration(actions: [delete, edit])
}

, тогда возникают ошибки.

Невозможно привести значение типа'abc.ListController' (0x1089b1398) в 'UITableViewCell' (0x1150f18e0).

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

1 Ответ

0 голосов
/ 24 октября 2018

Здесь вы отправляете self, который является параметром sender vc в

self.performSegue(withIdentifier: "EditItem", sender: self)

, и принудительно разворачиваете его в ячейку, которая является проблемой

if let indexPath = tableView.indexPath(for: sender as! UITableViewCell) {

Вместо этого вы можете сделать

self.performSegue(withIdentifier: "EditItem", sender:items[indexPath.row])

с

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if  segue.identifier == "EditItem" {
         let controller = segue.destination as! ItemDetailViewController
         controller.delegate = self 
         controller.itemToEdit = sender as! ItemType // where ItemType is the type of the array elements 
        }
    }
}
...