从另一个控制器和笔尖加载视图

时间:2011-09-07 20:08:39

标签: objective-c cocoa

我的情况是Panel加载了一个视图,但是当单击一个按钮时,我需要切换到另一个nib文件中的视图,并且该视图具有不同的控制器。

所以说我有Foo.nib和Bar.nib。 Foo.nib是一个面板和视图,Bar.nib只是一个视图。在FooController中,我有一行:

[NSBundle loadNibNamed:@"Foo" owner:self];

但我想我也需要:

[NSBundle loadNibNamed:@"Bar" owner:BarController];

当单击按钮时,我在FooController中切换View,但BarController不处理所有BarController GUI元素。这是正确的想法吗?如果是这样,即使BarController在Foo笔尖中,我也无法加载Bar nib。

1 个答案:

答案 0 :(得分:1)

您可能想制作3个nib文件:一个用于Panel,Foo和Bar。然后你可以创建NSViewController的FooController和BarController子类,并像这样创建它们

FooController *fooController = [[FooController alloc] initWithNibName:@"Foo" bundle:nil];
BarController *barController = [[BarController alloc] initWithNibName:@"Bar" bundle:nil];

每当您需要将视图放置在面板中时,您只需执行

NSView *fooView = [fooController view];
[panelView addSubview:fooView];

或者您可以使用replaceSubview交换视图:with:

有一个更完整的示例here