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

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).

请注意,这是在主详细信息项目中,由于它的导航控制器导致了此问题。
谢谢

最佳答案

其中的一些将取决于你的故事板是如何被配置来与导航控制器以及实际的主控制器和细节控制器交互的。苹果建议here安装主视图和次视图控制器。一种常见的技术是在[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]()都会正确打印出来。

关于ios - 从Xcode Master-Detail项目中的Detail View Controller访问Master View Controller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41650592/

10-09 18:10
查看更多