我有一个嵌入在导航控制器中的视图控制器。我通过“show”segue到视图控制器。从那里我通过“show”segue导航到tableviewcontroller。导航栏显示后退按钮,但在didclickrow上,self.dismiss不执行任何操作。完成块永远不会执行。我很困惑。必须有一些我不了解视图控制器的规则。
self.dismiss(animated: true, completion: {
print( "THIS NEVER EXECUTES AND NOTHING HAPPENS" )
})
答案 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说明了:
此方法从堆栈中删除顶视图控制器,并使堆栈的新顶部成为活动视图控制器。如果堆栈顶部的视图控制器是根视图控制器,则此方法不执行任何操作。