self.dismiss 在第 3 级 segue 上什么都不做

self.dismiss does nothing on 3rd level segue

我有一个嵌入在导航控制器中的视图控制器。我通过 "show" segue 转至视图控制器。从那里我通过 "show" segue 导航到 tableviewcontroller。导航栏显示后退按钮,但在 didclickrow self.dismiss 上什么都不做。完成块从不执行。我很困惑。必须有一些我不了解视图控制器的规则。

self.dismiss(animated: true, completion: {
    print( "THIS NEVER EXECUTES AND NOTHING HAPPENS" )
})    

UINavigationController 中,您应该使用函数

_ = navigationController?.popViewController(animated: true)

或者,如果您想返回最顶层视图,请使用:

_ = navigationController?.popToRootViewController(animated: true)

此函数的Apple Documentation说明:

This method removes the top view controller from the stack and makes the new top of the stack the active view controller. If the view controller at the top of the stack is the root view controller, this method does nothing.

"show segue" 用于推送视图控制器。 因此,您的代码将无法正常工作,因为您正试图关闭未显示的视图控制器。

您应该仅在显示视图控制器或您使用了 "Present Modally Segue" 类型时关闭。

当您使用 "Push Segue" 类型或推送视图控制器时,您应该使用 popViewController

self.navigationController?.popViewController(animated: true)