取消显示的视图控制器不起作用

Max*_*use 3 ios swift

我的项目中有一种复杂的模态segue设置。我试图解雇一个视图控制器另一个先前介绍的视图控制器。我正在使用此代码:

if(self.presentedViewController != nil){
    print(self.presentedViewController!)
    self.presentedViewController!.dismiss(animated: false)
    print(self.presentedViewController!)
}
Run Code Online (Sandbox Code Playgroud)

prints为那里进行调试。他们表明presentedViewController实际上并没有关闭。即使将其设置animated为false,当调用dismiss时,我仍会看到应用程序中出现了动画。但是,VC实际上并没有被解雇。有人知道解决方案吗?

hga*_*ale 7

苹果

呈现视图控制器负责解散其呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,则UIKit会要求呈现的视图控制器处理关闭。

dismiss(animated:completion :)消除由视图控制器以模态形式呈现的视图控制器。

https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss

如果您从应用程序的根目录显示视图控制器,例如:

呈现视图控制器

let root = UIApplication.shared.keyWindow!.rootViewController!
root.present(someViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

您可以像这样从显示的视图控制器中将其关闭:

呈现的视图控制器

let root = UIApplication.shared.keyWindow?.rootViewController
root?.dismiss(animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

  • 调用 root?.dismiss(animated: true,completion: nil) 不会关闭根视图控制器,它会关闭由该视图控制器以模态方式呈现的视图控制器。这就是“dismiss(animated:completion:)”的作用。 (2认同)