禁用滑动删除TableView行?

问题描述 投票:0回答:1

我有一个 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个回答
0
投票

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

要实现这一点,您需要在表视图控制器中添加以下内容:

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)
}

其中

tableView
是您自己对 UITableView 的属性引用。

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

© www.soinside.com 2019 - 2024. All rights reserved.