我正在使用NSWindowController从NIB加载窗口.但是,当我调用时showWindow:,窗口在视觉上是最顶层的,但焦点仍然保持原样(而不是将其移动到新窗口).
在创建新窗口(通过cmd + n)之前,第一个窗口(具有键盘焦点)稍微移动时,很容易看到这种情况发生.这是结果:

底部聚焦窗口是原始窗口.顶部未聚焦的窗口是新创建的窗口.
这是相关代码:
AppDelegate.h:
- (IBAction)newDocument:(id) sender;
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m:
- (IBAction)newDocument:(id) sender {
[[[FooController alloc] init] showWindow:self];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self newDocument:self];
}
Run Code Online (Sandbox Code Playgroud)
FooController.h:
@interface FooController : NSWindowController { }
@end
Run Code Online (Sandbox Code Playgroud)
FooController.m:
- (id)init {
self = [super initWithWindowNibName:@"FooWindow"];
return self;
}
Run Code Online (Sandbox Code Playgroud)
FooWindow.xib:
一个新创建的Window xib,没有修改.
MainMenu.xib:
默认的MainMenu.xib,其窗口已删除.
makeKeyAndOrderFront:在控制器windowDidLoad方法中调用窗口似乎不会聚焦新窗口.将文件的FooWindow.xib所有者设置为似乎FooController也没有帮助.
从NIB加载和显示窗口的正确方法是什么,以便它确实接收键盘焦点?
编辑:它看起来像NSWindowController的window方法的返回值nil,这就解释了为什么调用方法window没有做任何事情.但为什么呢nil?