是否可以在发布时安装自定义NSWindowController?

116*_*684 7 objective-c interface-builder nswindowcontroller

这个答案中说,可以通过从MainMenu.xib中删除窗口并从中"手动"实例化窗口控制器来获得自定义的NSWindowController applicationDidFinishLaunching:.但它也说:

要停止显示默认窗口,我只需将其删除即可.可能有更好的方法,但我不知道.

是否有更好的办法?如果它存在,那么更好的方法是什么?获得自己的窗口控制器是否被视为"正常"做法?

ilu*_*pra 11

为此,您通常会将NSWindowController子类化,并将File的Owner类更改为nib中的WindowController子类.

编辑:

如果你没有做一个基于文档的应用程序,只是希望自己的NSWindowController做到按需加载笔尖(完全合理的),那么你会从你的笔尖删除窗口实例化一个NSWindowController程序子类,使用它明确地做你的窗口加载...

@implementation MyApplicationDelegate {
    MyWindowControllerSubclass *windowController;
}


-(void)applicationDidFinishLaunching:(NSNotification *)notification {
    windowController = [[MyWindowControllerSubclass alloc] initWithWindowNibName:@"MyWindowNib"];

    [windowController showWindow:nil];
    [windowController.window makeKeyAndOrderFront:nil];
}
Run Code Online (Sandbox Code Playgroud)


tun*_*una 7

我遇到了同样的问题,我想向您展示我自己的解决方案.

  1. 创建一个普通的Cocoa应用程序(不是基于文档)
  2. 转到MainMenu.xib删除窗口
  3. 继续创建一个新文件,用户界面 - >窗口
  4. 之后创建NSWindowController的子类
  5. 打开刚刚创建的厦门国际银行文件和设置自定义类身份检查,以NSWindowController的刚刚创建的子类
  6. 右键单击File的Owner并将window属性连接到实际窗口
  7. 现在转到AppDelegate,创建一个包含CustomWindowController的实例变量
  8. 你所要做的最后一件事就是实例化CustomWindowController self.customWindowController = [[AccountWindowController alloc] initWithWindowNibName:@"CustomWindow"];和显示窗口[self.customWindowController showWindow:nil]- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

这是一个示例项目https://www.dropbox.com/s/ft3t7w72806tnoe/CustomWindowController.zip