从UIViewController调用UIViewController方法深深嵌套在一个模态中
在我的应用程序中,我有一个“主” ViewController
。 在viewDidAppear
的主体中启动应用程序时,我检索UserDefaults boolean
值的UserDefaults boolean
:如果用户未登录,我以这种方式模态化另一个viewcontroller
:
self.performSegue(withIdentifier:"loginView", sender:self)
这将启动模态AuthViewController
,一个包含“容器视图”的视图AuthViewController
,这是一个包含UIPageViewController
( AuthPageViewController
)的UIPageViewController
AuthPageViewController
。
最后一个有两个“页面”: LoginViewController
和RegisterViewController
。
LoginViewController
用于登录用户:一旦用户登录,我想在主ViewController
上调用一个函数(无论它做什么)。
所以,总结一下,我在LoginViewController
,我想调用ViewController
的方法。
在尝试解决方案时,我发现了以下内容:
- 我无法获得
LoginViewController
的引用,因为还没有直接从ViewController打开LoginViewController
。 此外,AuthViewController
没有使用present(_:animated:completion:)
但是我之前self.performSegue
是self.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