NSViewController和Nib的多个子视图

时间:2009-11-12 23:54:13

标签: cocoa interface-builder nib nsviewcontroller

我在使用Interface Builder和NSViewController加载视图时遇到了困难。

我的目标是拥有一个符合以下描述的视图:顶部的顶部栏(如工具栏但不完全)跨越整个视图宽度,下面是第二个“内容视图”。此复合视图由我的NSViewController子类拥有。

为此使用Interface Builder是有意义的。我创建了一个视图笔尖,并在其中添加了两个子视图,将它们正确放置(使用顶部栏和内容视图)。我已将File's Owner设置为MyViewController,并将连接出口等等。

我希望加载的视图(条形图和内容)也在它们自己的nib中(这可能是让我失望的),并且那些nib将其Custom Class设置为适用的相应NSView子类。我不确定要设置为File's Owner(我猜是MyController因为应该是他们的主人)。

唉,当我初始化MyViewController的实例时,我的笔尖实际上都没有显示。我已经正确地将它添加到我的Window的contentView(我已经检查过了),实际上,有些东西是加载的。也就是说,awakeFromNib被发送到条形视图,但它不会显示在窗口中。我想我肯定有一些电线穿过某处。也许有人可以帮助减轻我的一些挫折感?

编辑一些代码,以显示我正在做的事情

当应用程序完成启动时,从应用程序委托:

加载控制器
MyController *controller = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
[window setContentView:[controller view]];

然后在我的initWithNibName中,除了现在调用super之外我什么都不做。

2 个答案:

答案 0 :(得分:71)

当将每个视图分解为自己的nib并使用NSViewController时,处理事物的典型方法是为每个nib创建一个NSViewController子类。然后,每个相应nib文件的文件所有者将被设置为该NSViewController子类,您可以将view出口连接到笔尖中的自定义视图。然后,在控制主窗口内容视图的视图控制器中,实例化每个NSViewController子类的实例,然后将该控制器的视图添加到窗口中。

快速代码 - 在此代码中,我正在调用主内容视图控制器MainViewController,“工具栏”的控制器为TopViewController,其余内容为{ {1}}

ContentViewController

答案 1 :(得分:2)

MainViewController不应该是NSWindowController的子类吗?并且类中的出口连接到MainMenu.xib主窗口中的视图元素? 让我们希望旧线程仍在阅读......