NIBからウィンドウをロードするのにNSWindowController
を使用しています。しかし、showWindow:
と呼ぶと、ウィンドウは視覚的に一番上になりますが、フォーカスは元の位置に残ります(新しいウィンドウに移動するのではなく)。NIBからロードされたNSWindowに焦点を当てるには?
新しいウィンドウを作成する前に(キーボードフォーカスのある)最初のウィンドウをわずかに動かすと、これが起こるのは簡単です(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:修正なし
新たに作成されたウィンドウのXIB、。
MainMenu.xib:
デフォルトのMainMenu.xib。ウィンドウが削除されています。
コントローラのwindowDidLoad
メソッドのウィンドウでmakeKeyAndOrderFront:
を呼び出すと、新しいウィンドウが表示されないように見えます。 FooWindow.xibのファイル所有者をFooController
に設定しても、ヘルプは表示されませんでした。
キーボードフォーカスを受け取るようにNIBからウィンドウをロードして表示する正しい方法は何ですか?
編集:それは何もしませんwindow
上のメソッドを呼び出す理由を説明NSWindowController
のwindow
方法nil
を返す、のように見えます。しかし、それはなぜnil
ですか?
これらを 'windowDidLoad'から呼び出すと、新しいウィンドウはフォーカスされません。彼らはおそらく他の場所から呼ばれるべきでしょうか? – Zr40
私は彼らがmakeKeyAndOrderFrontの後に呼び出されるべきだと思います: – lbrndnr
これは前に試したことです。 'makeKeyAndOrderFront:'、 'makeMainWindow'と' makeKeyWindow'を 'windowDidLoad'に組み込んでも、新しいウィンドウはフォーカスを取得しません。 – Zr40