我刚刚实现了trailingSwipeActionsConfigurationForRowAt和leadingSwipeActionsConfigurationForRowAt,以便在我的UITableViewCell中添加滑动动作。
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration这会触发(在我的UITableViewController上)要用editing = true调用的func setEditing(_ editing: Bool, animated: Bool),这反过来也会触发我的编辑动画和进入编辑模式时想要的其他更改。(上下文操作与编辑/删除无关)。
我不想这样,但还没有找到一种方法来禁用这种行为,甚至只是检测到通过滑动操作调用了setEditing。
有什么想法吗?
发布于 2018-12-27 18:32:58
我能够通过以不同的方式触发“真实”编辑模式来解决这个问题。
在我的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)。
注1
我发现的一个问题是,当使用trailingSwipeActionsConfigurationForRowAt时,删除按钮(⛔️)不再起作用。点击它不会触发确认刷卡。
我发现必须存在一个带有用UIContextualAction(style: .destructive)初始化的UIContextualAction的trailingSwipeActionsConfigurationForRowAt (即具有破坏性风格)。这是随后用于显示删除确认的项目。
然而,我不希望该项目在使用常规的滑动动作时可见,所以为了只显示一个“实际编辑模式”,我使用了realEditMode标志。
这对我来说很有效,而且看起来不太老套。如果有更多的官方消息出现,我非常乐意改变公认的答案。
https://stackoverflow.com/questions/53933674
复制相似问题