NSWindowController
NIB からウィンドウをロードするために使用しています。ただし、 を呼び出すshowWindow:
と、ウィンドウは視覚的に一番上にありますが、フォーカスは (新しいウィンドウに移動するのではなく) 元の場所に残ります。
新しいウィンドウを作成する前に (cmd+n を使用)、最初のウィンドウ (キーボード フォーカスがある) をわずかに移動すると、これが発生することが簡単にわかります。これが結果です
。一番下のフォーカスされたウィンドウが元のウィンドウです。一番上のフォーカスされていないウィンドウは、新しく作成されたウィンドウです。
これは関連するコードです:
AppDelegate.h:
- (IBAction)newDocument:(id) sender;
AppDelegate.m:
- (IBAction)newDocument:(id) sender {
[[[FooController alloc] init] showWindow:self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self newDocument:self];
}
FooController.h:
@interface FooController : NSWindowController { }
@end
FooController.m:
- (id)init {
self = [super initWithWindowNibName:@"FooWindow"];
return self;
}
FooWindow.xib:
変更を加えていない、新しく作成された Window xib。
MainMenu.xib:
ウィンドウが削除されたデフォルトの MainMenu.xib。
makeKeyAndOrderFront:
コントローラーのメソッドでウィンドウを呼び出してもwindowDidLoad
、新しいウィンドウがフォーカスされないように見えます。FooWindow.xib のファイルの所有者を設定してFooController
も、役に立たないようです。
キーボード フォーカスを受け取るように NIB からウィンドウを読み込んで表示する正しい方法は何ですか?
編集:NSWindowController
のwindow
メソッドが を返すように見えますnil
。これは、 on のメソッドを呼び出しwindow
ても何もしない理由を説明しています。しかし、なぜnil
ですか?