动态更改 NSWindow 的 contentViewController

Dynamically changing a NSWindow's contentViewController

我有一个 NSWindowController 和一个 NSViewController,都在故事板中配置。

现在我正在尝试更新内容视图控制器以响应工具栏按钮单击(如下)。

@IBAction func toolbarButtonClicked(_ sender: Any) {
    contentViewController = storyboard?.instantiateController(withIdentifier: "VC") as! NSViewController?
}

此分配导致在视图控制器上调用 viewWillAppear,但此时内容视图没有分配 window。

这是为什么?是否可以像这样动态更改 window 的 contentViewController

看起来像:

  • 当在情节提要或 windowDidLoad 中配置内容视图时,在调用 viewWillAppear 时视图已经有一个 window,即当 window 本身出现。
  • 当 window 出现后设置内容视图时,将调用 viewWillAppear 以指示内容视图将添加到 window;在调用 viewWillLayout 之前,视图没有 window。

我使用 window 访问当前文档,所以我的解决方案是在更新内容之前访问文档并使用它来配置内容视图控制器。