动态更改 NSWindow 的 contentViewController
Dynamically changing a NSWindow's contentViewController
我有一个 NSWindowController
和一个 NSViewController
,都在故事板中配置。
- 当我在 Interface Builder 中设置
contentViewController
时,一切正常。
- 当我在
windowDidLoad
中以编程方式设置 contentViewController
时,一切都按预期工作。
现在我正在尝试更新内容视图控制器以响应工具栏按钮单击(如下)。
@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 访问当前文档,所以我的解决方案是在更新内容之前访问文档并使用它来配置内容视图控制器。
我有一个 NSWindowController
和一个 NSViewController
,都在故事板中配置。
- 当我在 Interface Builder 中设置
contentViewController
时,一切正常。 - 当我在
windowDidLoad
中以编程方式设置contentViewController
时,一切都按预期工作。
现在我正在尝试更新内容视图控制器以响应工具栏按钮单击(如下)。
@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 访问当前文档,所以我的解决方案是在更新内容之前访问文档并使用它来配置内容视图控制器。