【问题标题】:Dismissing presented view controller won't work关闭呈现的视图控制器将不起作用
【发布时间】:2017-12-03 07:05:48
【问题描述】:

我的项目中有一种复杂的模态转场设置。我试图关闭一个视图控制器,另一个视图控制器之前呈现。我正在使用以下代码:

if(self.presentedViewController != nil){
    print(self.presentedViewController!)
    self.presentedViewController!.dismiss(animated: false)
    print(self.presentedViewController!)
}

prints 用于调试目的。他们表明,presentedViewController 实际上并没有关闭。 即使我将animated 设置为false,当调用dismiss 时,我仍然看到应用程序中出现动画。然而,VC实际上并没有被解雇。 有谁知道解决办法吗?

【问题讨论】:

  • 您可能想要张贴您的故事板的图片。
  • 检查视图控制器是否已被取消初始化的更好方法是deinit { print("great success") }
  • 正如 sconewolf 正确提醒我的那样,如果你想关闭呈现的视图控制器,只需执行 dismiss(animated: false),而不是 presentedViewController!.dismiss(animated: false)。如果提交的 VC 本身已经提交了其他 VC,则后者将只关闭它提交的那些。通过单独在呈现的 VC 上调用 dismiss,这将消除它呈现的任何内容(以及它的孩子)。

标签: ios swift


【解决方案1】:

苹果

呈现视图控制器负责关闭视图 它呈现的控制器。如果您在呈现的视图上调用此方法 控制器本身,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)

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

呈现的视图控制器

let root = UIApplication.shared.keyWindow?.rootViewController
root?.dismiss(animated: true, completion: nil)

【讨论】:

  • 并且调用root?.dismiss(animated: true, completion: nil) 不会关闭根视图控制器,它会关闭由该视图控制器以模态方式呈现的视图控制器。这就是dismiss(animated:completion:) 所做的。
  • 完全正确。我站得更正了。我总是从呈现的视图控制器中调用它(正如你所指出的,它要求呈现的视图控制器处理解雇)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多