Swift 通过单击图像删除表行
我有以下职能:Swift 通过单击图像删除表行,swift,uitableview,Swift,Uitableview,我有以下职能: func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { myItemsInCart.remove(at: indexPath.row) tableView.reloadData()
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
{
if editingStyle == .delete
{
myItemsInCart.remove(at: indexPath.row)
tableView.reloadData()
}
}
@objc func removeTapped(tapGestureRecognizer: UITapGestureRecognizer){
let removeImage = tapGestureRecognizer.view as! UIImageView
print("my taped image view tag is : \(removeImage .tag)")
}
默认情况下,我可以通过向左滑动删除行:
但是我想通过单击删除图标而不是滑动来删除单元格。您可以创建一个协议来完成此操作。这只是实现这一点的多种方法之一
class MyTableViewController: ItemCellDelegate {
func deleteCell(cell: ItemCell) {
let indexPath = tableView.indexPath(for: cell)
myItemsInCart.remove(at: indexPath.row)
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ItemCell
cell.delegate = self
return cell
}
}
protocol ItemCellDelegate {
var delegate: UIViewController? { get set }
func deleteCell(cell: ItemCell)
}
class ItemCell: UITableViewCell {
var indexPath: IndexPath?
var delegate: ItemCellDelegate?
@objc func deleteCell(_ sender: Any?) {
delegate?.deleteCell(cell: self)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
deleteButton.addTarget(self, action: #selector(deleteCell), for: .touchUpInside)
}
}
移除图标是否为
ui按钮
?否,-ui图像视图
尝试将其更改为ui按钮
,按下按钮后,您可以调用委托函数移除UITableViewCell
。此解决方案方向正确,但存在缺陷。永远不要告诉单元格其索引路径,因为它可能会更改,尤其是在插入、删除或移动行时。更改单元格的协议,使参数为单元格本身而不是索引路径。然后,cellForRowAt
只需设置委托即可。然后,委托方法的实现将获得单元格。当需要时,您可以直接在表视图中查询单元格的索引路径。这是一个很好的观点。我更新了从tableView中获取indexPath的方法,将其传递给单元格,而不是将其设置为属性并传递回。1) 不要仅仅为了删除一行而调用reloadData
。在处使用。2) 将deleteCell(cell:UITableViewCell)
更改为deleteCell(cell:ItemCell)
。它特定于ItemCell
类,因此没有理由将参数保留为泛型。关于协议单元类型的另一个优点是。至于删除一行,你肯定是对的,但我只是让它和OP的一样。