如何显示从单独的 NIB 文件加载的子视图
Posted
技术标签:
【中文标题】如何显示从单独的 NIB 文件加载的子视图【英文标题】:How to display a subview loaded from a separate NIB file 【发布时间】:2010-06-02 01:29:30 【问题描述】:我正在开发一个使用 iTunes 风格的源列表的 Cocoa 桌面应用程序:源列表中的不同元素导致主要内容区域显示不同的视图。
内容区域完全被(垂直的)NSSplitView
填充;左侧是NSOutlineView
源列表。当用户选择左侧的项目时,相关视图会出现在拆分器的右侧。
我可以通过将所有内容放在一个 NIB 文件中并将无边框的NSTabView
放在拆分器的右侧来使其工作得足够好;要切换视图,我只需要更改选定的选项卡。但是将所有视图放在一个 NIB 中是不好的做法,所以我试图将每个子视图移动到它们自己的 NIB 文件中。
我对这个过程的大部分都有一个很好的想法——我为每个视图创建了一个NSViewController
子类(EntityDetailViewController
、GroupDetailViewController
等等),设置每个新视图的文件所有者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】:您的总体方法似乎合理。您是否验证了加载的视图控制器中的newSubview
不是零? newSubview
的框架在添加到视图层次结构之前和之后看起来是否正确?最后,您在什么时候使用replaceSubview:
代码?它应该在awakeFromNib
或更高版本中。
【讨论】:
以上是关于如何显示从单独的 NIB 文件加载的子视图的主要内容,如果未能解决你的问题,请参考以下文章
IOS:如何使从 nib 文件加载的子视图可以使用它的按钮(IBAction)