2

我正在为 Mac 创建一个测试应用程序,尝试使用 MVC。

我创建了 5 个 nib 文件,每个文件都有不同的窗口,以及每个 nib 的类文件。

当您按下 MainMenu.xib 上的按钮时,我该怎么做才能打开一个新视图?

我已经看到使用initWithNibName:, for iOS,但找不到它在 Mac 上的工作原理。还是我以错误的方式解决这个问题?如果是这样,您如何使用 Xcode 在 Mac 应用程序中管理不同的视图和类?

4

2 回答 2

10

因为您提到“我创建了 5 个 nib 文件,每个文件都有不同的窗口,以及每个 nib 的类文件。” 我假设您有 5 个不同的窗口(不是视图)并希望在按下按钮时打开它们。

每个窗口 nib 文件都由一个 控制NSWindowController,这将是 MVC 中的 C。要实际加载 nib 文件(以编程方式),请为其分配NSWindowController; NSWindowControllerOS X 中的 与UIViewControlleriPhone 上的相当。

NSWindowController *controller = [[NSWindowController alloc] initWithWindowNibName:@"nib1"]

然后您可以打开/关闭 NSWindowController 管理的窗口。

[controller showWindow:nil]显示窗口

[controller.window makeKeyAndOrderFront:self]使窗口成为关键窗口。

不过,您可能打算做其他事情,即保持相同的窗口但切换该窗口的内容视图。在这种情况下,您需要包含视图的 nib 文件(并使用 NSViewControllers 加载它们),而不是窗口(因为有窗口是多余的)。

但即使你坚持使用 windows,也要替换 contentView:

[currentWindow setContentView:[newWindowController.window contentView]];

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

您应该阅读 Apple 提供的关于 Windows、视图和应用程序的所有文档。

于 2012-04-15T19:22:19.567 回答
1

某种意义上的窗口就是“框架”,即它只有三个彩色按钮和一个标题,仅此而已。每个窗口都有一个内容视图,它是窗口的主视图,负责显示内容,例如按钮、文本、图像。内容本身通常实现为视图,即NSButton 和NSTextField 都是NSView 的子类。

OSX View 文档的这一部分可能会有所帮助:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/WorkingWithAViewHierarchy/WorkingWithAViewHierarchy.html#//apple_ref/doc/uid/TP40002978- CH4-SW13

尤其是图 3-1 和 3-2。

我希望这有助于理解。然后,要执行您想做的事情,请按照 Vervious 答案中详述的步骤进行操作。

于 2012-04-15T21:04:32.630 回答