Ios 从模态显示viewcontroller的调用方法

Ios 从模态显示viewcontroller的调用方法,ios,swift3,viewcontroller,Ios,Swift3,Viewcontroller,我有一个ViewController:如果用户没有登录,我会打开一个新的控制器,以便用户可以登录。打开的方式如下: if(!loggedIn){ self.performSegue(withIdentifier:"loginView", sender:self) } 登录后,我想取消这个模式,回到我的viewcontroller:这很容易做到,但我想做另一件事。我希望显示视图控制器在取消模式之前调用此方法: func goToContent(anim

我有一个
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)
这是可行的,但没有更好的解决方案吗

[编辑以答复评论中的问题] 我以这种方式实现了一个委托:

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

class ViewController: UIViewController, LoginViewControllerDelegate {

    var loginViewController:LoginViewController = LoginViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        loginViewController.delegate = self
    }
weak var delegate: LoginViewControllerDelegate?
在LoginViewController文件中,就在类声明之前:

protocol LoginViewControllerDelegate: class {

    func goToContent(animated:Bool)

}
内部LoginViewController:

class ViewController: UIViewController, LoginViewControllerDelegate {

    var loginViewController:LoginViewController = LoginViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        loginViewController.delegate = self
    }
weak var delegate: LoginViewControllerDelegate?
在它看来,确实加载了(只是为了测试:我只是在goToContent的主体中添加了一个打印):


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


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

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



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

您尝试过这个吗……如果是,会出现什么问题?没有问题:我想知道从我的模式中安装presenting view controller是否正确。我无法获取对我的presentingviewcontroller的引用,因为它是通过segue(performSegue)打开的。请为当前添加代码?您真正想要实现什么?@HermannKlecker:从模式中,我想调用呈现视图控制器上的方法(无论此方法是否推送另一个viewcontroller)您是否尝试过这个…如果是,出现了什么问题?没有问题:我想知道从我的模态安装演示视图控制器是否是正确的方法。我无法获取对我的presentingviewcontroller的引用,因为它是通过segue(performSegue)打开的。请为当前添加代码?您真正想要实现什么?@HermannKlecker:从模式中,我想调用呈现视图控制器上的方法(无论此方法是否推送另一个viewcontroller)但是ContentViewController是我使用“基本”viewcontroller中的一个序列打开的屏幕,它首先打开模式,而gotoContent是该视图控制器中包含的一个函数,然后需要创建
viewcontroller
的委托,我不需要创建ViewController的实例?不,您不需要创建ViewController()的实例,调用委托,它将处理它。我认为ViewController(启动模态的)除了符合LoginView中声明的协议外,还必须实例化LoginView的一个成员并将其委托设置为self。我说得对吗?但是ContentViewController是我使用“基本”viewcontroller中的一个序列打开的屏幕,它首先打开模式,而gotoContent是该视图控制器中包含的一个函数,然后需要创建
viewcontroller的委托,我不需要创建ViewController的实例?不,您不需要创建ViewController()的实例,调用委托,它将处理它。我认为ViewController(启动模态的)除了符合LoginView中声明的协议外,还必须实例化LoginView的一个成员并将其委托设置为self。我说得对吗?