从modal中展示viewcontroller的调用方法

Posted

技术标签:

【中文标题】从modal中展示viewcontroller的调用方法【英文标题】:Call method of presenting viewcontroller from modal 【发布时间】:2016-11-11 08:30:21 【问题描述】:

我有一个ViewController:如果用户没有登录,我会打开一个新的控制器,以便用户可以登录。开口是这样完成的:

if(!loggedIn)
             self.performSegue(withIdentifier:"loginView", sender:self)
        

登录后,我想关闭这个模式并回到我的视图控制器:这很容易做到,但我想要另一件事。我希望呈现视图控制器在我关闭我的模式之前调用此方法:

 func goToContent(animated:Bool)
        let viewController:ContentViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Content") as! ContentViewController
        self.navigationController!.pushViewController(viewController, animated: animated)
    

这可能吗?从我的模式中,我无法获得对呈现视图控制器的引用。那就是:我尝试了以下方法,但我不知道这是否是正确的方法:

let vc:ViewController = ViewController()
vc.goToContent(animated:false)

这可行,但没有更好的解决方案吗?

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

在 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()

【问题讨论】:

你试过这个...如果是的话,问题是什么? 没有问题:我想知道从我的模态中实例化呈现视图控制器是否是正确的继续方式。我无法获得对 presentingviewcontroller 的引用,因为它是通过 segue (performSegue) 打开的 请添加您的当前代码? 你真正想要达到什么目的? @HermannKlecker:从模式中我想在呈现视图控制器上调用一个方法(无论此方法是否推送另一个视图控制器) 【参考方案1】:

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

现在登录成功后,需要调用这个委托方法。它会起作用的。

【讨论】:

但 ContentViewController 是我使用“基本”视图控制器的 segue 打开的屏幕,它首先打开模式,而 gotoContent 是该视图控制器中包含的函数 那你需要创建一个ViewController 的委托 那么,我不需要创建 ViewController 的实例吗? 不,你不需要创建 ViewController() 的实例,调用委托,它会处理它。 我认为 ViewController(启动模式)除了符合 LoginView 中声明的协议外,还必须实例化 LoginView 的成员并将其委托设置为 self。我说的对吗?

以上是关于从modal中展示viewcontroller的调用方法的主要内容,如果未能解决你的问题,请参考以下文章

iOS 如何从 Uiview 呈现 Modal ViewController

如何从 Modal ViewController 重新加载父 UITableViewController 中的数据

Swift、Modal Segue 和 ViewController 问题

使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)

将 Modal UINavigationController 展开到另一个 ViewController

iOS Modal Segue 丢弃源 ViewController?