我正在创建一个测试应用程序,尝试使用MVC,用于Mac。
我创建了5个nib文件,每个文件都有不同的窗口,每个笔尖都有类文件。
当我按下MainMenu.xib上的按钮时,我该怎么做才能打开一个新视图?
我见过使用initWithNibName:
for iOS,但无法在Mac上找到它的工作原理。或者我是以错误的方式来做这件事的?如果是这样,您如何使用Xcode管理Mac应用程序中的不同视图和类?
答案 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]];
您应该阅读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。我希望这对理解有所帮助。然后,要执行您想要执行的操作,请按照“回答”中详细说明的步骤操作。