7

この回答では MainMenu.xib からウィンドウを削除し、からウィンドウ コントローラーを「手動で」インスタンス化することにより、カスタム NSWindowController を持つことが可能であると言われていますapplicationDidFinishLaunching:。しかし、次のようにも述べています。

デフォルトのウィンドウが表示されないようにするには、それを削除するだけです。もっと良い方法があるかもしれませんが、私はそれを知りません。

より良い方法はありますかそのより良い方法は何ですか、それが存在する必要がありますか? 独自のウィンドウコントローラーを取得するのは「通常の」慣行と見なされますか?

4

3 に答える 3

12

これを行うには、通常、NSWindowController をサブクラス化し、ファイルの Owner クラスを nib の 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];
}
于 2013-02-07T17:58:22.303 に答える
0

私は実際に別の方法を見つけました:NSWindowControllerメソッドがあり-initWithWindow:ます。App Delegate には、起動時にwindowウィンドウにリンクされるプロパティがあるためMainMenu.xib、それを WindowController にリンクするのは簡単でした。

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

これについてはまだ調査していませんが、エラーは発生しません。

于 2013-02-19T15:05:38.987 に答える