我有一个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)
这有效,但是没有更好的解决方案吗?
[编辑回复评论中的问题] 我用这种方式实现了一个委托:
ViewController中的:
class ViewController: UIViewController, LoginViewControllerDelegate {
var loginViewController:LoginViewController = LoginViewController()
override func viewDidLoad() {
super.viewDidLoad()
loginViewController.delegate = self
}
在LoginViewController文件中,就在类声明之前:
protocol LoginViewControllerDelegate: class {
func goToContent(animated:Bool)
}
在LoginViewController中:
weak var delegate: LoginViewControllerDelegate?
在其视图中确实加载(仅用于测试:我只是在goToContent的主体内放置一个打印件):
delegate?.goToContent()
答案 0 :(得分:2)
您需要创建ContentViewController
的委托,并且在该委托中,您需要添加此方法goToContent
。
现在,当您成功登录时,您需要调用此委托方法。它会起作用。