Objective c 是否可以在启动时使用自定义NSWindowController?
答案是,通过从main menu.xib中删除窗口并从Objective c 是否可以在启动时使用自定义NSWindowController?,objective-c,interface-builder,nswindowcontroller,Objective C,Interface Builder,Nswindowcontroller,答案是,通过从main menu.xib中删除窗口并从applicationdFinishLaunching:中“手动”实例化窗口控制器,可以拥有自定义NSWindowController。但它也说: 要停止显示默认窗口,我只需删除它。也许有更好的办法,但我不知道 有更好的办法吗?如果存在,那更好的方法是什么?获取自己的窗口控制器是否被视为“正常”做法?要做到这一点,您通常需要在nib中将NSWindowController子类化,并将文件的所有者类更改为WindowController子类 编
applicationdFinishLaunching:
中“手动”实例化窗口控制器,可以拥有自定义NSWindowController。但它也说:
要停止显示默认窗口,我只需删除它。也许有更好的办法,但我不知道
有更好的办法吗?如果存在,那更好的方法是什么?获取自己的窗口控制器是否被视为“正常”做法?要做到这一点,您通常需要在nib中将NSWindowController子类化,并将文件的所有者类更改为WindowController子类 编辑: 如果您不是在开发基于文档的应用程序,而只是希望自己的NSWindowController按需加载nib(完全合理),那么您应该从nib中删除该窗口,并以编程方式实例化一个
NSWindowController
子类,显式使用它来加载窗口
@implementation MyApplicationDelegate {
MyWindowControllerSubclass *windowController;
}
-(void)applicationDidFinishLaunching:(NSNotification *)notification {
windowController = [[MyWindowControllerSubclass alloc] initWithWindowNibName:@"MyWindowNib"];
[windowController showWindow:nil];
[windowController.window makeKeyAndOrderFront:nil];
}
我实际上找到了另一种方法:
NSWindowController
具有方法-initWithWindow:
。由于应用程序代理有一个属性窗口
,该属性在启动时从主菜单.xib
链接到窗口,因此很容易将其链接到我的WindowController:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
MyWindowController *wincon = [[MyWindowController alloc] initWithWindow:window];
}
我还没有对此进行研究,但没有发现任何错误。我遇到了同样的问题,我想向您展示我自己的解决方案
self.CustomWindowController=[[AccountWindowController alloc]initWithWindowNibName:@“CustomWindow”]编码>并在-(void)applicationdFinishLaunching:(NSNotification*)通知中显示窗口[self.customWindowController showWindow:nil]
下面是一个示例项目遗憾的是,这不起作用。最初的所有者是NSApplication,当您更改它时,会收到2条警告。窗口确实出现了,但是我的窗口控制器的
initWithWindow:
没有被调用,正如awakeFromNib
一样……对不起,您没有更改MainMenu中的子类。nib,您在文档的nib中更改了它。我假设你正在做一个基于文档的应用程序,我认为你甚至没有得到一个NSWindowController来替换,否则,不是默认情况下。如果你不是在做一个基于文档的应用程序,那么最好的办法就是删除样板窗口,在ApplicationIDFinishLaunching:中安装一个你自己设计的NSWindowController子类,并使用它以编程方式从单独的窗口样板nib加载你的窗口。不,它不是一个基于文档的应用程序。那我就这么做!谢谢虽然我很感激你花时间回答,但这是伊鲁瓦卡普拉回答的翻版。你完全正确。我没看见!我在这里也做了同样的事情,我觉得我回答得很快。不过你的回答更有用,因为它提供了一步一步的指导