1

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

问题是 - 我不知道如何处理交换视图,也许换句话说 - 我知道但不完全是......我在这里找到了类似的讨论:NSViewController and multiple subviews from a Nib but there is no answer how to create 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 of SampleAppDelegate 像这样:

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

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

}

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

马尔钦

4

1 回答 1

2

您不需要 NSWindowController 来进行视图交换,仅在需要多个顶级窗口时才使用 NSWindowController(我认为)。

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

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

然后在您的主窗口中,如果您要放置一个 NSBox,如果您想将 MeasurementsView 放入其中

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

并将 ConnectionView 放入其中

NSView *connectionView = [connectionViewController view];
[boxAtBottomOfWindow setContentView:connectionView];
于 2011-07-07T22:35:06.820 回答