我的应用程序中有一个自定义NSBorderlessWindowMask
窗口,当用户点击某个热键时,我会显示该窗口。
这个窗口有一个`NSTextField,当窗口出现时必须成为第一响应者。
此窗口不是主窗口,但可以从主窗口获取焦点。
这就是我要做的事情,并将其作为关键:
[self.myCustomWindow makeKeyAndOrderFront:sender];
然后设置第一个响应者
[self.myTextField becomeFirstResponder];
当应用程序是最前面的应用程序时,一切都按预期工作, 但如果不是,则会出现窗口,但不会成为密钥,我必须单击它才能激活。
我在我的CustomWindow
课程中重写:
- (BOOL)canBecomeKeyWindow {
return YES;
}
可能是什么问题?
谢谢!
答案 0 :(得分:0)
根据Cocoa Event Handling Guide,只有最前面的应用程序可以具有主窗口和关键窗口状态:
当应用程序同时显示主窗口和关键窗口时, 两个窗口的响应者链都可以参与一个动作 信息。正如“窗口分层和Windows的类型”中所述, 主窗口是最前面的文档或应用程序窗口。经常 主窗口也有关键状态,这意味着它们是当前的焦点 用户输入。但是主窗口可以具有辅助窗口或面板 与之关联,例如“查找”面板或“信息”窗口显示 文档窗口中选择的详细信息。当这个次要的 窗口是用户输入的焦点,那么它就是关键窗口。
我没有看到任何解决方法。
编辑:同样来自Window Programming Guide:
由于密钥窗口属于活动应用程序,因此 突出显示的标题栏具有帮助显示的辅助效果 哪个应用程序当前有效。关键窗口是最多的 在活动应用程序中突出显示窗口,使其成为“关键” 在第二种意义上:它是用户关注的主要焦点 屏幕。