在我的应用中,我有一个“主要”ViewController
。在其viewDidAppear
正文中的应用启动时,我检索UserDefaults boolean
的值:如果用户未登录,我会以这种方式以模态方式呈现另一个viewcontroller
:
self.performSegue(withIdentifier:"loginView", sender:self)
这将启动模态AuthViewController
,一个包含“容器视图”的视图控件,这是一个包含UIPageViewController
(AuthPageViewController
)的AuthViewController区域。
最后一页有两个“页面”:LoginViewController
和RegisterViewController
。
LoginViewController
用于登录用户:一旦用户登录,我想在主ViewController
上调用一个函数(无论它做什么)。
总而言之,我在LoginViewController
,我想调用ViewController
的方法。
在尝试解决方案时,我发现了以下内容:
presentingViewController
的引用,因为LoginViewController
尚未直接从ViewController打开。此外,AuthViewController
未与present(_:animated:completion:)
一起发布,但正如我之前所说的那样self.performSegue
; ViewController
实例化LoginViewController
并调用方法有效,但这不是一个好主意; NSNotification
就像一个魅力; 你能帮我理解如何从我的LoginViewController调用ViewController方法吗?代码示例非常受欢迎,但我感谢任何建议。
答案 0 :(得分:0)
让我用代码解释一下如何在这种情况下使用委托,
首先,您需要在此{/ 1}}中创建一个委托
LoginViewController
然后像这样为
创建委托变量protocol LoginViewControllerDelegate: class {
func goToContent(animated:Bool)
}
现在你weak var delegate: LoginViewControllerDelegate?
,你需要在准备ViewController
方法中指定delegate
,因为你正在使用像这样的segue
prepareforsegue
并实现这样的方法
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")
}
goToContent