调用从模态呈现视图控制器的方法

问题描述:

我有一个ViewController:如果用户没有登录,我打开一个模块化的新控制器,以便用户可以登录。开幕做这样:调用从模态呈现视图控制器的方法

if(!loggedIn){ 
      self.performSegue(withIdentifier:"loginView", sender:self) 
     } 

登录后,我要关闭此模式,并回到我的ViewController:这是很容易做到的,但我想另一件事。我希望呈现视图控制器在我解散我的模态之前调用此方法:

func goToContent(animated:Bool){ 
     let viewController:ContentViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Content") as! ContentViewController 
     self.navigationController!.pushViewController(viewController, animated: animated) 
    } 

这可能吗?从我的模式,我无法获得对呈现viewController的引用。那就是:我尝试以下,但我不知道这是否是正确的前进方式:

let vc:ViewController = ViewController() 
vc.goToContent(animated:false) 

这工作,但不存在更好的解决方案?

[编辑回复在评论一个问题] 我实现了一个代表这样说:

在视图控制器

class ViewController: UIViewController, LoginViewControllerDelegate { 

    var loginViewController:LoginViewController = LoginViewController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     loginViewController.delegate = self 
    } 

在LoginViewController文件,只需在类声明之前:

protocol LoginViewControllerDelegate: class { 

    func goToContent(animated:Bool) 

} 

Inside LoginViewController:

weak var delegate: LoginViewControllerDelegate? 
在其看来

没有负载(只是用于测试:我简单的把goToContent的体内打印):

delegate?.goToContent() 
+0

你有没有试过这个...如果是的话会发生什么问题? – KKRocks

+0

有没有问题:我想知道如果从我的模式安装呈现视图控制器是正确的方式进行。我无法得到我的呈现控制器的参考,因为它是通过segue(performSegue) –

+0

打开的,请添加您的代码以呈现? – KKRocks

您需要创建的ContentViewController一个委托,并在委托你需要添加此方法goToContent

现在,当您成功登录时,您需要调用此委托方法。它会工作。

+0

但ContentViewController是我使用从打开模式的“基本”视图控制器中的segue打开的屏幕,gotoContent是包含在该视图控制器中的函数 –

+0

然后,您需要创建'ViewController'的代表' – Rajat

+0

因此,我不需要创建一个ViewController的实例? –