覆盖 UITableViewController 中的 setEdit:调用从何而来?

Posted

技术标签:

【中文标题】覆盖 UITableViewController 中的 setEdit:调用从何而来?【英文标题】:Override setEdit in UITableViewController: where does the call come from? 【发布时间】:2018-08-30 16:09:31 【问题描述】:

当用户点击UITableViewController 左上角的编辑或完成时,我需要更改一些内容(除了 Apple 自动执行的操作)。

我覆盖setEditing(),在那里做我的视觉改变。工作正常。

当用户在UITableViewCell上向左滑动时,UITableViewController 的方法setEditing() 也会被调用。

问题来了:像 Apple 一样,当用户在单元格上向左滑动时,我需要以不同的方式处理重要的事情。

我如何知道哪个用户操作(点击编辑或在单元格上向左滑动)导致了setEditing() 调用?

【问题讨论】:

【参考方案1】:

要判断滑动是否导致编辑发生,请将UITableViewDelegate 回调tableView(_:willBeginEditingRowAt:) 添加到您的代码中。在这个函数中设置一个内部标志,当setEditing被调用时检查这个标志。

【讨论】:

【参考方案2】:

受到@bbarnhart 回答的启发:

当覆盖tableView(_:willBeginEditingRowAt:) 时,setEditing(true) 不会在单元格滑动开始时调用。

当覆盖 tableView(_:didEndEditingRowAt:) 时,setEditing(false) 在单元格编辑结束时不会被调用。

所以只有这些覆盖的存在就解决了问题。

【讨论】:

以上是关于覆盖 UITableViewController 中的 setEdit:调用从何而来?的主要内容,如果未能解决你的问题,请参考以下文章

使用情节提要时未调用 UITableViewController 覆盖初始化函数

(Swift) 以编程方式在 UITableViewController 上方添加 UIView

IOS:UISearchBar 部分覆盖 UINavigationBar 提示

UITableViewController 未根据输入调整大小

具有混合静态/动态内容的 UITableViewController 中的 NSRangeException

如何为 UITableViewController 设置背景