1

实际应用程序中,视图层次结构可能很复杂,因此能够将不同的视图放在不同的 nib 中确实很有帮助。我正在关注InfoBarStackView 示例项目,他们提供了一个非常好的示例,说明如何使用托管不同视图的新 NSStackView 类。他们制作了一个DisclosureViewController负责托管内容视图的内容,更改其大小,以便可以从打开状态变为关闭状态。

这是一个简化的例子。我们有两个独立的笔尖:

  1. DisclosureViewController 披露视图控制器
  2. ContentViewController 内容视图控制器

在公开视图的占位符视图中加载内容视图的最简单方法是什么?是否可以仅在 IB 中执行此操作?

目前我的 AppDelegate 有很多冗余,因为它需要保存对两个视图控制器的引用。我想知道是否有办法简化这种情况?对于这个简单的示例,AppDelegate 将使用如下代码从两个不同的 nib 加载,

// In AppDelegate.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [_disclosureView1.view replaceSubview:_disclosureView1.placeholder with:_contentView1.view];
    [(NSView*)_window.contentView addSubview:_disclosureView1.view];
}
4

1 回答 1

2

您可以在主 XIB 中使用 NSViewControllers 来对应您在 NSStackView 中所需的视图——在 XIB 的检查器中,您可以设置它们应该加载的其他 XIB 的名称以获取它们的“视图”。

假设您在主 XIB 中的这些 viewController 上有 IBOutlets,它就像调用一样简单:

 /* load the views into the stack view */
_stackView = [NSStackView stackViewWithViews:@[_viewControllerOutlet1.view, _viewControllerOutlet2.view, _viewControllerOutlet3.view]];
于 2014-01-19T10:27:08.240 回答