ios - UITableView 滑动编辑
问题描述
我有两个 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)。
如何滑动以编辑项目?
解决方案
在这里你发送self
哪个是 vc insender
参数
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
}
}
}
推荐阅读
- javascript - 带函数的for循环
- angular - angular 5“装饰器不支持函数表达式”
- git - 与不同的开发人员一起在 Git 中工作时哪一个好
- python - Python如何在通过格式化程序时用空格打开文件路径
- html - 图像方面填充模式:CSS
- java - 使用 mockito 或代理拦截 Java 中的方法调用
- java - Android:如何按父级剪辑视图,例如 CSS 溢出:隐藏
- teradata - 创建或重命名动态表 teradata
- jquery - 如何隐藏跨度的第一个字母?
- virtual-machine - 如何从 KVM 虚拟化中的主机服务器获取访客的 IP 地址?