Zr4*_*r40 4 cocoa nswindow nswindowcontroller
我正在使用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?
Zr4*_*r40 11
好的,我找到了这个问题的原因.
必须将xib的File所有者设置为控制器,并且(这是我不知道的部分)您必须将控制器的window插座连接到窗口本身.
完成后,它只是工作.不makeKeyWindow,makeMainWindow或makeKeyAndOrderFront:需要.
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |