从UIViewController调用UIViewController方法深深嵌套在一个模态中

在我的应用程序中,我有一个“主” ViewController 。 在viewDidAppear的主体中启动应用程序时,我检索UserDefaults boolean值的UserDefaults boolean :如果用户未登录,我以这种方式模态化另一个viewcontroller

 self.performSegue(withIdentifier:"loginView", sender:self) 

这将启动模态AuthViewController ,一个包含“容器视图”的视图AuthViewController ,这是一个包含UIPageViewControllerAuthPageViewController )的UIPageViewController AuthPageViewController

最后一个有两个“页面”: LoginViewControllerRegisterViewController

一千多字

LoginViewController用于登录用户:一旦用户登录,我想在主ViewController上调用一个函数(无论它做什么)。

所以,总结一下,我在LoginViewController ,我想调用ViewController的方法。

在尝试解决方案时,我发现了以下内容:

  • 我无法获得LoginViewController的引用,因为还没有直接从ViewController打开LoginViewController 。 此外, AuthViewController没有使用present(_:animated:completion:)但是我之前self.performSegueself.performSegue ;
  • LoginViewController实例化ViewController并调用方法有效,但这不是一个好主意;
  • NSNotification就像一个魅力;
  • 显然,代表们没有工作,或者我在这个应用程序的竞赛中错过了一些关于他们实现的内容;

你能帮我理解如何从我的LoginViewController调用一个ViewController方法吗? 代码示例非常受欢迎,但我感谢任何建议。

让我用代码解释它在这种情况下如何使用委托,

首先,您需要在LoginViewController创建一个委托,就像这样

 protocol LoginViewControllerDelegate: class { func goToContent(animated:Bool) } 

然后像这样为委托创建一个变量

 weak var delegate: LoginViewControllerDelegate? 

现在在你的ViewController你必须在prepare prepareforsegue方法中分配这样的delegate ,因为你正在使用像这样的segue

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "yourSegueIdentifier" { let nextScene = segue.destination as! LoginViewController nextScene.delegate = self } } 

并实现这样的方法

 func goToContent(animated: Bool) { print("test") } 

通过这种方式,您可以从LoginViewController调用goToContent