在 UITableViewController 的 UINavigationItem 栏中从 "Edit" 更改后按下 "Done" 会触发什么?

What is triggered when "Done" is pressed after changing from "Edit" in UINavigationItem bar for UITableViewController?

简短:在 Swift/iOS 中,当退出 UITableViewController "Edit" 模式时,"Done"(以前是 "Edit")导航栏按钮何时触发?当用户按下 "Done" 时,我想在我的 UINavigationItem 栏中启用“+”按钮,以便用户可以通过迁移到另一个视图控制器再次添加行。

更长:当 UITableViewController 显示在 UINavigationItem 导航栏下方时,有一个 "Edit" 按钮,单击它以启用删除后变为 "Done" 和 move/drags。通过在作为 UITableViewController class:

的一部分生成的 viewDidLoad() 中取消注释代码启用此按钮时效果很好

self.navigationItem.leftBarButtonItem = self.editButtonItem

我的 move/drags 和删除工作正常,但我想适当地禁用我的“+”按钮(addBarButton,用于导航到另一个视图控制器以添加新行),而用户处于编辑模式。然后,我想在用户单击 "Done" 后重新启用 addBarButton(返回 "Edit")。

看起来在 func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) 期间禁用 addBarButton 是正确的。如果我正确阅读了 Apple 的文档,则当用户在导航栏中按下编辑时会触发此操作。我不知道当用户按下 "Done"(以前标记为 "Edit" 的按钮)时会触发什么。如果我在带有 moveRowAt 的 func tableView 之后启用我的 addBarButton“+”按钮,这会在用户按下 "Done".

之前启用 addBarButton

我引用的 Apple 文档位于: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/ManageReorderRow/ManageReorderRow.html#//apple_ref/doc/uid/TP40007451-CH11-SW1

抱歉,如果我遗漏了一些明显的东西。谢谢

答案在 UIViewController editButtonItem 文档的描述中是正确的:

If one of the custom views of the navigationItem property is set to the returned object, the associated navigation bar displays an Edit button if isEditing is false and a Done button if isEditing is true. The default button action invokes the setEditing(_:animated:) method.

最后一句是关键。您应该覆盖 table 视图控制器子类中的 setEditing(_:animated:) 方法。请务必调用 super 实现,然后根据控制器是进入还是退出编辑模式执行您想要的任何自定义操作。

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if (editing) {
        // User tapped the Edit button, do what you need
    } else {
        // User tapped the Done button, do what you need
    }
}