调用从模态呈现视图控制器的方法
我有一个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()
您需要创建的ContentViewController
一个委托,并在委托你需要添加此方法goToContent
。
现在,当您成功登录时,您需要调用此委托方法。它会工作。
但ContentViewController是我使用从打开模式的“基本”视图控制器中的segue打开的屏幕,gotoContent是包含在该视图控制器中的函数 –
然后,您需要创建'ViewController'的代表' – Rajat
因此,我不需要创建一个ViewController的实例? –
你有没有试过这个...如果是的话会发生什么问题? – KKRocks
有没有问题:我想知道如果从我的模式安装呈现视图控制器是正确的方式进行。我无法得到我的呈现控制器的参考,因为它是通过segue(performSegue) –
打开的,请添加您的代码以呈现? – KKRocks