繁体   English   中英

从Xcode Master-Detail项目中的Detail View Controller访问Master View Controller

[英]Accessing Master View Controller from Detail View Controller inside Xcode Master-Detail Project

我正在尝试创建一个扩展,以便可以从局部视图控制器访问主视图控制器以更新变量。

import UIKit

extension UISplitViewController {

    var ggida_primaryViewController: UIViewController? {
        get {
            let navController = self.viewControllers.first! as? UINavigationController
            return navController.topViewController!
        }
    }

}

我用以下代码称呼它:

let masterVC: MasterViewController? = self.splitViewController?.ggida_primaryViewController as! MasterViewController?

但是出现以下错误:

Could not cast value of type 'UINavigationController' (0x10e2c2008) to 'xxx.MasterViewController' (0x10b980350).

注意,这是在主从项目中,由于导航控制器导致了此问题。

谢谢

其中一些取决于您如何实际配置情节提要板以与导航控制器以及实际的主控制器和详细控制器交互。 Apple建议在此安装“不变的主要和次要视图控制器。一种常见的技术是在[Master和Detail]位置都安装导航控制器,然后根据需要推送和弹出新内容。”

在Xcode 8.2中使用全新的Master-Detail应用程序(遵循该模式),此扩展适用于我:

extension UISplitViewController {
    var primaryViewController: MasterViewController? {
        let navController = self.viewControllers.first as? UINavigationController
        return navController?.topViewController as? MasterViewController
    }
}

这是我如何在DetailViewController的viewDidLoad()中调用它的方法:

let masterViewController = splitViewController?.primaryViewController
print(masterViewController?.objects)

在这种情况下,每次加载DetailViewController时,MasterViewController的属性var objects = [Any]()正确打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM