【问题标题】:Instantiating split view controller by identifier in OS X storyboard does not load view hierarchy通过 OS X 故事板中的标识符实例化拆分视图控制器不会加载视图层次结构
【发布时间】:2017-10-06 04:53:54
【问题描述】:

我正在尝试在 Swift OS X 应用程序中实现主-细节-细节视图。顶层视图控制器是一个带有三个子视图控制器的 NSSplitViewController。主视图和第一个细节视图是相当标准的,具有固定的行为。第二个详细视图需要根据第一个详细视图中的选择进行更改。

第二个细节控制器是一个简单的视图控制器,它将通过根据选择安装新的子视图和控制器来响应第一个细节视图中的选择变化。

最终内容的替代视图控制器在同一个故事板中实现,没有通过segues连接到任何东西;目的是使用 -[NSStoryboard instantiateControllerWithIdentifier:] 创建它们并将它们安装为子视图控制器和子视图。

实例化的视图控制器恰好是 NSSplitViewControllers。

问题是:当我实例化详细拆分视图控制器并安装它们时,它们是空的。到目前为止,我能够观察到的是:

  • 实例化的视图控制器属于正确的类(NSSplitViewController 的子视图);
  • 他们没有子视图
  • 他们确实有 splitViewItems,而 splitViewItems 是我希望看到加载的视图控制器

我需要做些什么来完全加载/填充加载的拆分视图控制器吗?

TIA, 道格

【问题讨论】:

    标签: swift macos nsstoryboard nssplitviewcontroller


    【解决方案1】:

    找到了。我正在尝试将实例化的 NSSplitViewController 的“splitView”添加为子视图,而不是其“视图”(包含 splitView)。访问“view”属性会加载视图层次结构;使用“splitView”没有。

    【讨论】:

      【解决方案2】:

      如果您将拆分视图控制器添加到情节提要并删除与提供的两个拆分视图项的连接,您可以使用 addChildViewController: 添加它们,并且您必须为这些视图设置情节提要 ID

      class SplitViewController: NSSplitViewController {
      
      @IBOutlet weak var mySplitView: NSSplitView!
      
      var leftPane: NSViewController?
      var contentView: NSViewController?
      
      override func viewDidLoad() {
          super.viewDidLoad()
          let story = self.storyboard
      
          leftPane = story?.instantiateController(withIdentifier: "LeftPaneViewController") as! LeftPaneViewController?
          contentView = story?.instantiateController(withIdentifier: "ContentViewController") as! ContentViewController?
      
          self.addChildViewController(leftPane!)
          self.addChildViewController(contentView!)
      }
      
      }
      

      【讨论】:

        【解决方案3】:

        就我而言,我在init?(coder:) 内的NSSplitViewController 子类中调用addSplitViewItem(),这为时过早。一旦我将调用移至viewDidLoad(),每个吐出视图项的视图控制器的视图层次结构被添加到拆分视图控制器的视图层次结构中,并且一切正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-10
          • 2021-08-05
          • 1970-01-01
          • 2012-10-16
          • 2017-12-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多