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。我说得对吗?