首页 > 解决方案 > 如何获取导航控制器的父序列的引用?

问题描述

你好,

我实际上正在开发一个带有配置故事板的应用程序,所以我需要使用Navigation Controller。但在此之前,我有一个名为A的视图控制器,带有一个与我的Navigation Controller相连的按钮。在我的情况下,我想从我的Navigation Controller中的View Controller获取对我的View Controller A的引用。我尝试在导航控制器的视图控制器中执行此操作以获取对视图控制器 A 的引用:

ViewControllerA().myFunc

但这不起作用。我知道引用不好,因为我重新创建了 ViewControllerA 的新实例。有人有一个很好的解决方案来引用我的 View Controller 吗?

这是我的问题的图片表示

你也可以在这里下载我的 Xcode 项目

提前致谢。

标签: swiftxcode

解决方案


为 viewControllerB 定义委托协议并将 viewControllerA 设置为它的委托

protocole ViewControllerBDelegate {
    func myFunc()
}

class ViewControllerB : UIViewController {
    @IBOutlet var myDelegate : ViewControllerBDelegate? // set the connection to viewControllerA in storyboard

    func someFunctionThatCallDelegate() {
        myDelegate?.myFunc() // Call the delegate which in your case will be viewControllerA
    }
...

class ViewControllerA : UIViewController, ViewControllerBDelegate {
    func myFunc() {
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let identifier = segue.identifier {
            if (identifier == "showingB") { // use identifier of segue set in storyboard
                if let vc = segue.destination as? ViewControllerB {
                    vc.delegate = self // set viewControllerA as delegate for viewControllerB
                }
            }
        }
    }
}

推荐阅读