gpt4 book ai didi

cocoa - 如何为从 NIB 加载的 NSWindow 提供焦点?

转载 作者:行者123 更新时间:2023-12-03 16:12:27 25 4
gpt4 key购买 nike

我正在使用 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,其窗口被删除。

在 Controller 的 windowDidLoad 方法中的窗口上调用 makeKeyAndOrderFront: 似乎不会将焦点集中在新窗口上。将 FooWindow.xib 的文件所有者设置为 FooController 似乎也没有帮助。

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

编辑:看起来像NSWindowControllerwindow方法返回nil,这解释了为什么调用方法window 不执行任何操作。但为什么它是nil

最佳答案

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

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

完成后,它就可以工作了。不需要 makeKeyWindowmakeMainWindowmakeKeyAndOrderFront:

关于cocoa - 如何为从 NIB 加载的 NSWindow 提供焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com