在模态视图控制器上呈现模态视图控制器

Present modal view controller over modal view controller

我有一个视图控制器 VC1,它从其他一些 VC0 以全屏模式呈现。在我的情节提要中,我有一个从 VC1 到 VC2 的模态转场,也全屏显示。在我的应用程序中,我可以清楚地看到 VC2 over VC1 over VC0,因为它们的某些部分视图是透明的。完美。

但是,我将多次重复使用 VC2,因此我不想为情节提要中的每个控制器都使用它,所以我想以编程方式完成同样的事情。但是,当我在 VC1 中调用 presentViewController:animated:completion 来呈现 VC2 时,当模态转换完成时,VC1 的视图消失了。当VC2被dismiss时,转场动画完成后VC1的view重新出现。

如何以编程方式获得与使用故事板转场时相同的效果?

您需要将当前控制器的 modalPresentationStyle 属性 设置为 UIModalPresentationOverFullScreen。在调用 presentViewController:animated:completion 之前设置 属性。

let newView = self.storyboard!.instantiateViewControllerWithIdentifier("NewViewController") as! NewViewController

newView.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen

self.presentViewController(newView, animated: true, completion: nil)

您只能在可见的控制器上显示,通常是 rootViewController。但是当有一个模态呈现的控制器时,它会覆盖根控制器,所以你不能使用它。但是你可以在模式上展示,它可以通过 rootViewController.prsentedViewController 访问。这是一些代码:

let rootVC = window?.rootViewController
let presentingVC = (rootVC?.presentedViewController ?? rootVC)
presentingVC?.present(myController, animated: true, completion: nil)

您不需要更改 modalPresentationStyle