我正在使用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];
}
FooController.h:
@interface FooController : NSWindowController { }
@end
FooController.m:
- (id)init {
self = [super initWithWindowNibName:@"FooWindow"];
return self;
}
FooWindow.xib:
一个新创建的Window xib,无需修改。
MainMenu.xib:
默认的MainMenu.xib,其窗口已删除。
在控制器的makeKeyAndOrderFront:
方法中调用窗口windowDidLoad
似乎不会聚焦新窗口。将文件的FooWindow.xib所有者设置为FooController
也似乎没有帮助。
从NIB加载和显示窗口的正确方法是什么,以便它确实接收键盘焦点?
修改:NSWindowController
的{{1}}方法返回window
,这解释了为什么调用nil
上的方法不行任何东西。但为什么它是window
?
答案 0 :(得分:11)
好的,我找到了这个问题的原因。
必须将xib的文件所有者设置为控制器,并且(这是我不知道的部分)你必须将控制器的window
插座连接到窗口本身。
完成后,它才有效。不需要makeKeyWindow
,makeMainWindow
或makeKeyAndOrderFront:
。
答案 1 :(得分:1)
也许makeMainWindow:或makeKeyWindow:help