我使用NSWindowController
從NIB加載窗口。但是,當我打電話給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加載和顯示窗口的正確方法是什麼,以便它確實接收鍵盤焦點?
編輯:看起來NSWindowController
的window
方法返回nil
,這就解釋了爲什麼呼籲window
方法沒有做任何事情。但爲什麼它是nil
?
從'windowDidLoad'調用它們不會聚焦新窗口。他們是否應該從其他地方撥打電話? – Zr40
我認爲應該在makeKeyAndOrderFront之後調用它們:調用 – lbrndnr
這就是我以前的嘗試。無論「makeKeyAndOrderFront:」,「makeMainWindow」和「makeKeyWindow」的組合和順序如何,我放入'windowDidLoad'中,新窗口都不會獲得焦點。 – Zr40