2

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

内容区域完全由 (vertical) 填充NSSplitView;左侧是NSOutlineView源列表。当用户选择左侧的项目时,相关视图会出现在拆分器的右侧。

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

我对这个过程的大部分都有一个很好的想法——我NSViewController为每个视图创建了一个子类(EntityDetailViewControllerGroupDetailViewController等),将每个新 NIB 的文件所有者设置为相关的控制器类,view在每个视图中设置连接NIB,并重新设计了绑定。我不知道如何实际更改屏幕上显示的子视图。

我尝试使用NSView右侧的默认泛型并向其发送addSubview:消息;我尝试将其作为第一个子视图连接并调用

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

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

4

1 回答 1

0

Your general approach seems sound. Have you verified that the newSubview from the loaded view controller is non-nil? Does the frame of newSubview look correct before and after it is added to the view hierarchy? Lastly, at what point are you using the replaceSubview: code? It should be in awakeFromNib or later.

于 2010-09-01T01:27:47.550 回答