self.dismiss在第3级别上没有任何作用

时间:2018-02-15 16:03:24

标签: ios swift segue dismiss

我有一个嵌入在导航控制器中的视图控制器。我通过“show”segue到视图控制器。从那里我通过“show”segue导航到tableviewcontroller。导航栏显示后退按钮,但在didclickrow上,self.dismiss不执行任何操作。完成块永远不会执行。我很困惑。必须有一些我不了解视图控制器的规则。

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

2 个答案:

答案 0 :(得分:4)

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

只有在显示视图控制器或使用“当前模态搜索”类型时才应关闭。

使用“Push Segue”类型或推送视图控制器时,应使用popViewController

self.navigationController?.popViewController(animated: true)

答案 1 :(得分:0)

UINavigationController中,你应该使用函数

_ = navigationController?.popViewController(animated: true)

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

_ = navigationController?.popToRootViewController(animated: true)

此功能的Apple Documentation说明了:

  

此方法从堆栈中删除顶视图控制器,并使堆栈的新顶部成为活动视图控制器。如果堆栈顶部的视图控制器是根视图控制器,则此方法不执行任何操作。