我正在开发一个使用iTunes风格的源列表的Cocoa桌面应用程序:源列表中的不同元素会导致主要内容区域显示不同的视图。
内容区域完全用(垂直)NSSplitView
填充;左侧是NSOutlineView
来源列表。当用户选择左侧的项目时,相关视图将显示在分割器的右侧。
通过将所有内容放在一个NIB文件中并将无边框NSTabView
放在拆分器的右侧,我可以使其工作得很好;要切换视图,我只需要更改选中的选项卡。但是将所有视图放在一个NIB中是不好的做法,所以我试图将每个子视图移动到他们自己的NIB文件中。
我非常清楚这个过程的大部分内容 - 我为每个视图创建了一个NSViewController
子类(EntityDetailViewController
,GroupDetailViewController
等等),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加载的子视图?
答案 0 :(得分:0)
你的一般方法看似合理。您是否验证了加载的视图控制器中的newSubview
是否为非零? newSubview
的框架在添加到视图层次结构之前和之后看起来是否正确?最后,您在什么时候使用replaceSubview:
代码?它应该在awakeFromNib
或更晚。