iOS 和 OS X 之间的区别在于,iOS 中只有一个窗口,但 OS X 中可以有多个窗口。NSViewControllers
在 OS X 中的工作方式与UIViewControllers
在那NSViewController
旨在加载和处理单个视图,而UIViewControllers
(为我相对缺乏 iOS 知识而道歉)似乎可以处理多个视图并在视图之间提供更多的粘合力。
即便是苹果文档 http://developer.apple.com/library/mac/#documentation/General/Conceptual/MOSXAppProgrammingGuide/CoreAppDesign/CoreAppDesign.html写下:
在 Mac OS X 中,AppKit 视图控制器是窗口的助手
控制器,最终负责一切发生的事情
在窗口中。
因此,对应的UIViewController
在 OS X 中不是NSViewController
, 反而NSWindowController
,它确实为 OS X 提供了大部分内容UIViewController
对于 iOS,它通过管理整个单个窗口以及其中视图的布局/内容/交互来实现。
在你的情况下,我会使用NSWindowController
- 虽然如果应用程序非常简单,App Delegate
也有效;如果应用程序非常复杂,那么使用NSViewController
拆分代码并不是一个坏主意。
最好的方法是使用NSWindowController
将以编程方式将其加载到应用程序委托中,使用[[CustomWindowController alloc] init]
and
@implementation CustomWindowController
- (id)init
{
self=[super initWithWindowNibName:@"CustomWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
或致电
[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];
如果您希望它可重用,请直接(并覆盖 initWithWindowNibName)。
并且您可以删除MainMenu.xib 中的默认窗口。
从根本上讲,NSWindowController 通常管理在其自己的 nib 文件中实例化的窗口。 NSWindowController 通常拥有该 nib 文件。 (虽然可以让它管理以编程方式创建的窗口,但通常不是这样做的。)
为了能够使用自定义NSWindowController
,因此您需要在单独的 nib/xib 文件中创建要管理的窗口。 (使用默认的 xib 文件意味着你允许 Cocoa 自动实例化一个 NSWindowController,而没有机会进行子类化;你不能使用自定义的NSWindowController
使用默认的 NSMainNibFile。对于一个简单的应用程序,只需将所有控制器代码放在 NSApplication/App Delegate 中)
至少在 Xcode 4 中,该过程涉及使用窗口模板和自定义创建 xibNSWindowController
类,实例化CustomWindowController
基于 -init 或任何地方的笔尖的类,然后调用[CustomWindowController showWindow:self];
(或者如果这不起作用,-makeKeyAndOrderFront:
)让窗口实际显示(在- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification
可能是个好地方)。
要阻止默认窗口显示,我只需将其删除。可能有更好的方法,但我不知道。