禁用滑动删除 TableView 行?

Disable swipe to delete TableView row?

提问人:psb 提问时间:10/4/2023 更新时间:10/5/2023 访问量:28

问:

我有一个 UITableView,我正在使用以下函数实现滑动删除功能:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        cities.remove(at: indexPath.row)
        citiesTableView.deleteRows(at: [indexPath], with: .automatic)
    }
}

我的单元格上有一个滑块,用户可以与之交互,但是在尝试操作滑块时很容易意外激活删除滑动操作。

我希望有一个编辑按钮可以启用滑动删除操作,但我无法做到这一点。

我尝试禁用单元格选择,甚至禁用用户交互,包括表格视图和单元格(这确实禁用了控制滑块的功能,但仍允许滑动删除。

我还试图通过检查是否按下了编辑按钮来保护滑动功能。

正确的方法是什么?

~ 谢谢

iOS Swift UITableView UIKit的

评论


答:

1赞 HangarRash 10/5/2023 #1

解决方案是仅当表视图处于编辑模式时才支持删除。但是,这意味着您的表格根本不支持滑动删除。相反,当表视图处于编辑模式时,用户将看到红色圆圈删除按钮。

为此,您需要在表视图控制器中满足以下条件:

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    // Adjust the following as needed for your table's specific logic
    return self.isEditing ? .delete : .none
}

保留现有方法。tableView(_:commit:forRowAt:)

要添加“编辑”按钮,请将以下内容放入:viewDidLoad

self.navigationItem.rightBarButtonItem = self.editButtonItem

如果将 UIViewController 与自己的 UITableView 而不是 UITableViewController 一起使用,则需要按如下方式进行重写:setEditing

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    self.tableView.setEditing(editing, animated: animated)
}

其中是你自己对 UITableView 的属性引用。tableView

只需这 2 或 3 次更改,您的表格视图将不支持滑动删除,这允许您的滑块不受干扰地工作。用户可以点击“编辑”按钮,通过点击显示的红色圆圈删除按钮来启用删除任何行的功能。然后,他们可以点击“完成”按钮返回非编辑模式。