1

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

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

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

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

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

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

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

TIA,道格

4

3 回答 3

1

如果您将拆分视图控制器添加到情节提要并删除与提供的两个拆分视图项的连接,您可以使用 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!)
}

}
于 2016-11-20T19:23:36.937 回答
1

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

于 2015-11-12T13:24:59.920 回答
0

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

于 2017-10-05T20:53:54.473 回答