我有一个 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)
}
}
我的单元格上有一个用户可以与之交互的滑块,但是在尝试操作滑块时很容易意外激活删除滑动操作。
我希望有一个编辑按钮可以启用滑动删除操作,但我无法实现该操作。
我尝试禁用单元格选择,甚至禁用表格视图和单元格的用户交互(这确实禁用了控制滑块的能力,但仍然允许滑动删除。)
我还尝试通过检查是否按下了编辑按钮来保护滑动功能。
执行此操作的正确方法是什么?
~ 谢谢
解决方案是只在表视图处于编辑模式时支持删除。但是,这意味着您的表格根本不支持滑动删除。相反,当表视图处于编辑模式时,用户将看到红色圆圈删除按钮。
要实现这一点,您需要在表视图控制器中添加以下内容:
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 个更改,您的表格视图将不支持滑动删除,从而使您的滑块可以不受干扰地工作。用户可以点击“编辑”按钮,通过点击显示的红色圆圈删除按钮来启用删除任何行的功能。然后他们可以点击“完成”按钮返回非编辑模式。