我有一个视图控制器(包含我的菜单)呈现在另一个视图控制器(我的应用程序)的顶部。从所呈现的视图控制器访问呈现视图控制器?
我需要从提供的视图控制器(我的菜单)访问呈现视图控制器(在我的菜单下),例如访问一些变量或使呈现视图控制器执行其中一个segues。
但是,我只是不知道该怎么做。 我知道“presentsViewController”和“presentedViewController”变量,但我没有设法成功地使用它们。
任何想法?
代码(从所呈现的VC,其作为对AppDelegate中的参考,其中所述窗口被引用):
if let presentingViewController =
self.appDelegate.window?.rootViewController?.presentingViewController
{
presentingViewController.performSegue(
withIdentifier: "nameOfMySegue", sender: self)
}
解决此问题的常用模式是使用委托设计模式。在你的Menu VC中声明一个委托,并将第一个VC设置为委托。现在你可以在代理上设置一个属性或一个调用方法。另一种方式可能是使用通知模式。 – TheAppMentor
@TheAppMentor通过直接引用呈现的视图控制器来描述两种更好的设计模式。然而,如果你想要一个强耦合的关系,Apple确实会提供'presentationViewController'。 – dmorrow
这两种方法实际上都有效。非常感谢。 – BUZZE