从模态中调用viewcontroller的调用方法

时间:2016-11-11 08:30:22

标签: ios swift3 viewcontroller

我有一个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()

1 个答案:

答案 0 :(得分:2)

您需要创建ContentViewController的委托,并且在该委托中,您需要添加此方法goToContent

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