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
,新窗口都不会获得焦点。