什么相当于initWithNibName:在OSX上?

时间:2012-04-15 18:59:52

标签: objective-c macos cocoa

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

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

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

我见过使用initWithNibName: for iOS,但无法在Mac上找到它的工作原理。或者我是以错误的方式来做这件事的?如果是这样,您如何使用Xcode管理Mac应用程序中的不同视图和类?

2 个答案:

答案 0 :(得分:10)

因为您提到“我创建了5个nib文件,每个文件都有不同的窗口,每个笔尖都有类文件。”我假设你有5个不同的 windows (不是视图),想要按下按钮打开它们。

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

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

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

[controller showWindow:nil]显示窗口

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

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

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

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

enter image description here

enter image description here

enter image description here

enter image description here

您应该阅读Apple在Windows,视图和应用程序上提供的所有文档。

答案 1 :(得分: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。

我希望这对理解有所帮助。然后,要执行您想要执行的操作,请按照“回答”中详细说明的步骤操作。