交换视图 - NSWindowController和NSViewController(s)

时间:2011-07-07 19:16:52

标签: objective-c cocoa nswindowcontroller nsviewcontroller

我是Mac OS编程的新手。目前我正在尝试创建一个简单的测量应用程序,它将有一个窗口,顶部是工具栏,底部是相应的视图。单击工具栏中的按钮会导致在其下方切换视图 - 例如点击“连接”按钮将显示连接设置,“测量”将显示设备的当前数据。

问题是 - 我不知道如何处理交换视图,也许换句话说 - 我知道但不完全...... 我在这里找到了类似的讨论:NSViewController and multiple subviews from a Nib但是没有答案如何创建 NSWindowController 以及如何将其分配给主窗口。因为我认为有必要创建NSWindowController以便能够交换视图。如果我错了,请纠正我。

所以我正在创建一个新项目(在这里称为Sample),并且有SampleAppDelegate.h文件,它看起来像:

@interface SampleAppDelegate : NSObject <NSApplicationDelegate> {
@private
    NSWindow *window;
}

@property (assign) IBOutlet NSWindow *window;

@end

有一个窗口ivar,它保存了唯一一个窗口,由MainMenu.xib创建(我认为)。

那么我应该如何从SampleAppDelegate为窗口创建NSWindowController?

我应该只是在函数中创建我的WindowController子类 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 像这样的SampleAppDelegate:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    MyWindowController *wc = [[MyWindowController alloc] initWithWindow:self.window];

    [wc showWindow:self];
    self.myWindowController = wc;
    [wc release];

}

我会非常感谢任何提示和帮助。

的Marcin

1 个答案:

答案 0 :(得分:2)

你需要一个NSWindowController进行视图交换,NSWindowController使用(我认为)就在你需要多个顶层窗口时。

您可以为您想要的每种类型的视图创建子类NSViewController,将每个视图放入一个nib,并在需要将视图放入窗口的底部时调用 - (NSView *)视图。你应该可以像往常一样将它添加到窗口中,或者使用setContentView将它放在NSBox中:view

对于您的两个视图,您将创建MeasurmentsViewController和ConnectionViewController。然后,您将在MeasurementsView.nib和ConnectionView.nib中创建视图,并使用这些nib初始化视图控制器。

然后在主窗口中,如果要放置NSBox,如果要将MeasurementsView放入其中

NSView *measurementsView = [measurementsViewController view];
[boxAtBottomOfWindow setContentView:measurementsView];

并将ConnectionView放入其中

NSView *connectionView = [connectionViewController view];
[boxAtBottomOfWindow setContentView:connectionView];