在这个答案中,据说可以通过从 MainMenu.xib 中删除窗口并从applicationDidFinishLaunching:
. 但它也说:
要停止显示默认窗口,我只需将其删除。可能有更好的方法,但我不知道。
有没有更好的方法?有什么更好的方法,它应该存在吗?拥有自己的窗口控制器是否被认为是“正常”的做法?
在这个答案中,据说可以通过从 MainMenu.xib 中删除窗口并从applicationDidFinishLaunching:
. 但它也说:
要停止显示默认窗口,我只需将其删除。可能有更好的方法,但我不知道。
有没有更好的方法?有什么更好的方法,它应该存在吗?拥有自己的窗口控制器是否被认为是“正常”的做法?
为此,您通常会将 NSWindowController 子类化并将 File's Owner 类更改为 nib 中的 WindowController 子类。
编辑:
如果你不是在做一个基于文档的应用程序,只是想要一个你自己的 NSWindowController 来按需加载 Nibs(完全合理),那么你会从你的 nib 中删除窗口并以NSWindowController
编程方式实例化一个子类,使用它明确地做你的窗口加载......
@implementation MyApplicationDelegate {
MyWindowControllerSubclass *windowController;
}
-(void)applicationDidFinishLaunching:(NSNotification *)notification {
windowController = [[MyWindowControllerSubclass alloc] initWithWindowNibName:@"MyWindowNib"];
[windowController showWindow:nil];
[windowController.window makeKeyAndOrderFront:nil];
}
我遇到了同样的问题,我想向您展示我自己的解决方案。
self.customWindowController = [[AccountWindowController alloc] initWithWindowNibName:@"CustomWindow"];
并[self.customWindowController showWindow:nil]
在- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
这是一个示例项目https://www.dropbox.com/s/ft3t7w72806tnoe/CustomWindowController.zip
我实际上找到了另一种方法:NSWindowController
拥有方法-initWithWindow:
。因为 App Delegate 有一个在启动时window
链接到窗口的属性MainMenu.xib
,所以很容易将它链接到我的 WindowController:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
MyWindowController *wincon = [[MyWindowController alloc] initWithWindow:window];
}
我还没有研究这个,但我没有得到任何错误。