我刚刚实现了trailingSwipeActionsConfigurationForRowAt
和leadingSwipeActionsConfigurationForRowAt
来向我的UITableViewCell
添加滑动操作。
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration
这触发(在我的UITableViewController上)func setEditing(_ editing: Bool, animated: Bool)
被editing = true
调用,这又触发了我的编辑动画以及进入编辑模式时想要的其他更改。 (上下文操作与编辑/删除无关)。
我不想要这个,但是还没有找到一种禁用此行为的方法,即使只是检测到通过滑动操作调用了setEditing
。
有什么想法吗?
答案 0 :(得分:1)
我能够通过触发不同的“真实”编辑模式来解决此问题。
在我的UITableViewController
上:
class MyTableViewController: UITableViewController {
var realEditMode: Bool = false
func setRealEditing(_ editing: Bool) {
realEditMode = editing
setEditing(realEditMode, animated: true)
}
// See Note 1 below
@available(iOS 11.0, *)
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration {
guard let item = itemForIndexPath(indexPath) else {
return UISwipeActionsConfiguration(actions: [])
}
if realEditMode {
return UISwipeActionsConfiguration(actions: [
buildActionConfiguration(.delete, fromIndexPath: indexPath)
])
} else {
return UISwipeActionsConfiguration(actions: [
buildActionConfiguration(.read, fromIndexPath: indexPath)
])
}
}
@available(iOS 11.0, *)
func buildActionConfiguration(_ action: MyCellActionEnum, fromIndexPath indexPath: IndexPath) -> UIContextualAction {
// logic to build `UIContextualAction`
}
}
然后在我的UITableViewCell
中检查是通过手动触发还是通过滑动编辑触发来设置editing
标志:
class MyCell: UITableViewCell {
var myTableViewController: MyTableViewController?
override func setEditing(_ editing: Bool, animated: Bool) {
if editing && !(myTableViewController?.realEditMode ?? true) {
return
}
super.setEditing(editing, animated: animated)
}
}
然后在UI的编辑按钮上,我将setEditing(true/false, animated: true)
更改为setRealEditing(true/false)
。
我发现的一个问题是,使用trailingSwipeActionsConfigurationForRowAt
时,删除按钮(⛔️)不再起作用。点击它并不会触发确认滑动。
我发现必须存在一个trailingSwipeActionsConfigurationForRowAt
,其中一个UIContextualAction
用UIContextualAction(style: .destructive)
初始化(即具有破坏性的样式)。这是用于显示删除确认的项目。
但是,当我使用常规的滑动操作时,我不希望该项目可见。因此,我仅使用realEditMode
标志来显示一种“真实编辑模式”。
这对我有用,而且似乎不太笨拙。如果出现更多官方消息,我很乐意更改接受的答案。