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

时间:2016-11-11 11:20:32

标签: ios swift3

在我的应用中,我有一个“主要”ViewController。在其viewDidAppear正文中的应用启动时,我检索UserDefaults boolean的值:如果用户未登录,我会以这种方式以模态方式呈现另一个viewcontroller

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

这将启动模态AuthViewController,一个包含“容器视图”的视图控件,这是一个包含UIPageViewControllerAuthPageViewController)的AuthViewController区域。

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

More than a thousand words

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

总而言之,我在LoginViewController,我想调用ViewController的方法。

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

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

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

1 个答案:

答案 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