【发布时间】:2011-03-13 12:39:52
【问题描述】:
我正在使用 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,其窗口已删除。
在控制器的windowDidLoad 方法中对窗口调用makeKeyAndOrderFront: 似乎不会聚焦新窗口。将 FooWindow.xib 的文件所有者设置为 FooController 似乎也没有帮助。
从 NIB 加载和显示窗口以使其接收键盘焦点的正确方法是什么?
编辑: 看起来NSWindowController 的window 方法返回nil,这就解释了为什么在window 上调用方法不起作用。但是为什么是nil呢?
【问题讨论】:
标签: cocoa nswindow nswindowcontroller