我刚刚实现了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
是通过滑动动作调用的。
有什么想法吗
2条答案
按热度按时间fivyi3re1#
我能够通过不同的方式触发“真实的”编辑模式来解决这个问题。
在我的
UITableViewController
上:在我的
UITableViewCell
中,检查editing
标志是通过手动触发还是通过滑动编辑触发设置的:然后在UI中的编辑按钮上,我将
setEditing(true/false, animated: true)
改为setRealEditing(true/false)
。注1
我发现的一个问题是,当使用
trailingSwipeActionsConfigurationForRowAt
时,删除按钮(️)不再起作用。点击它并没有触发确认滑动。我发现必须存在一个
trailingSwipeActionsConfigurationForRowAt
和一个用UIContextualAction(style: .destructive)
初始化的UIContextualAction
(即具有破坏性风格)。这是随后用于显示删除确认的项目。但是我不想在使用常规滑动操作时看到该项目,所以只显示一个“真实的的编辑模式”,我使用了
realEditMode
标志。这对我来说很有效,而且看起来也不太古怪。如果有任何更官方的消息出现,我很乐意改变公认的答案。
nhn9ugyo2#
如果有人遇到这个问题,答案是here:
简单地覆盖tableView(:willBeginEditingRowAt:)将阻止在单元格滑动开始时调用setEditing(true)。
覆盖tableView(:didEndEditingRowAt:)可以防止在单元格编辑结束时调用setEditing(false)。