如何显示从单独的NIB文件加载的子视图

时间:2010-06-02 01:29:30

标签: cocoa nsview nib nsviewcontroller

我正在开发一个使用iTunes风格的源列表的Cocoa桌面应用程序:源列表中的不同元素会导致主要内容区域显示不同的视图。

内容区域完全用(垂直)NSSplitView填充;左侧是NSOutlineView来源列表。当用户选择左侧的项目时,相关视图将显示在分割器的右侧。

通过将所有内容放在一个NIB文件中并将无边框NSTabView放在拆分器的右侧,我可以使其工作得很好;要切换视图,我只需要更改选中的选项卡。但是将所有视图放在一个NIB中是不好的做法,所以我试图将每个子视图移动到他们自己的NIB文件中。

我非常清楚这个过程的大部分内容 - 我为每个视图创建了一个NSViewController子类(EntityDetailViewControllerGroupDetailViewController等等),set将每个新NIB的文件所有者发送到相关控制器类,在每个NIB中设置view连接,并重新设置绑定。我不知道的是如何实际更改屏幕上显示的子视图。

我尝试在右侧使用默认通用NSView并发送addSubview:条消息;我尝试连接到它作为第一个子视图并调用

NSView *newSubview = /* get subview from the new subview controller */
[[subview superview] replaceSubview:subview with:newSubview];
[self setSubview:newSubview];

但是一切都只是空白。如何显示从单独的NIB加载的子视图?

1 个答案:

答案 0 :(得分:0)

你的一般方法看似合理。您是否验证了加载的视图控制器中的newSubview是否为非零? newSubview的框架在添加到视图层次结构之前和之后看起来是否正确?最后,您在什么时候使用replaceSubview:代码?它应该在awakeFromNib或更晚。