Cocoa 如何将焦点放在从NIB加载的NSWindow上?

Cocoa 如何将焦点放在从NIB加载的NSWindow上?,cocoa,nswindow,nswindowcontroller,Cocoa,Nswindow,Nswindowcontroller,我正在使用NSWindowController从NIB加载窗口。但是,当我调用showWindow:时,窗口在视觉上是最上面的,但焦点仍然保持在原来的位置(而不是移动到新窗口) 在创建新窗口(通过cmd+n)之前,当第一个窗口(带键盘焦点)稍微移动时,很容易看到这种情况。这就是结果: 底部的聚焦窗口是原始窗口。顶部的未聚焦窗口是新创建的窗口 以下是相关代码: AppDelegate.h: - (IBAction)newDocument:(id) sender; AppDelegate.m:

我正在使用
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];
}
F.h:

@interface FooController : NSWindowController { }
@end
footcontroller.m:

- (id)init {
    self = [super initWithWindowNibName:@"FooWindow"];
    return self;
}
FooWindow.xib:
新创建的窗口xib,无需修改

main menu.xib:
默认的MainMenu.xib,其窗口已删除

在控制器的
windowDidLoad
方法的窗口上调用
makekeyandrefront:
,似乎不会聚焦新窗口。将FooWindow.xib的文件所有者设置为
FooController
似乎也没有帮助

从NIB加载和显示窗口以使其接收键盘焦点的正确方式是什么


Edit:它看起来像是
NSWindowController
window
方法返回
nil
,这解释了为什么在
window
上调用方法没有任何作用。但是为什么是
nil

可能是makeMainWindow:或makeKeyWindow:有帮助

好的,我找到了这个问题的原因

必须将xib文件的所有者设置为控制器,并且(这是我不知道的部分),您必须将控制器的
窗口
出口连接到窗口本身


这样做之后,它就起作用了。不需要
makeKeyWindow
makeMainWindow
MakeKeyandDerfront:

windowDidLoad
调用它们不会聚焦新窗口。也许应该从其他地方调用它们?我认为它们应该在MakeKeyandDerfront之后调用:调用这是我以前尝试过的。无论我将
makeKeyWindow和derfront:
makeMainWindow
makeyWindow
的组合和顺序放入
windowDidLoad
,新窗口都不会获得焦点。