提问人:psb 提问时间:10/4/2023 更新时间:10/5/2023 访问量:28
禁用滑动删除 TableView 行?
Disable swipe to delete TableView row?
问:
我有一个 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)
}
}
我的单元格上有一个滑块,用户可以与之交互,但是在尝试操作滑块时很容易意外激活删除滑动操作。
我希望有一个编辑按钮可以启用滑动删除操作,但我无法做到这一点。
我尝试禁用单元格选择,甚至禁用用户交互,包括表格视图和单元格(这确实禁用了控制滑块的功能,但仍允许滑动删除。
我还试图通过检查是否按下了编辑按钮来保护滑动功能。
正确的方法是什么?
~ 谢谢
答:
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 次更改,您的表格视图将不支持滑动删除,这允许您的滑块不受干扰地工作。用户可以点击“编辑”按钮,通过点击显示的红色圆圈删除按钮来启用删除任何行的功能。然后,他们可以点击“完成”按钮返回非编辑模式。
评论