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

时间:2013-02-07 17:56:54

标签: objective-c interface-builder nswindowcontroller

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

  

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

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

3 个答案:

答案 0 :(得分:11)

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

编辑:

如果您没有使用基于文档的应用程序,只想让自己的NSWindowController按需加载Nib(完全合理),那么您将从笔尖中删除窗口并实例化{ {1}}以编程方式子类,明确使用它来进行窗口加载...

NSWindowController

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:0)

我实际上找到了另一种方式:NSWindowController有方法-initWithWindow:。因为App Delegate有一个属性window,它在启动时链接到MainMenu.xib的窗口,很容易将它链接到我的WindowController:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    MyWindowController *wincon = [[MyWindowController alloc] initWithWindow:window];
}

我尚未对此进行研究,但我没有任何错误。