当主应用程序窗口未激活时,使NSBordlessWindow键和激活

时间:2014-07-29 09:49:08

标签: osx-mavericks nswindow becomefirstresponder makekeyandordertofront nsborderlesswindowmask

我的应用程序中有一个自定义NSBorderlessWindowMask窗口,当用户点击某个热键时,我会显示该窗口。 这个窗口有一个`NSTextField,当窗口出现时必须成为第一响应者。 此窗口不是主窗口,但可以从主窗口获取焦点。 这就是我要做的事情,并将其作为关键:

[self.myCustomWindow makeKeyAndOrderFront:sender];

然后设置第一个响应者

[self.myTextField becomeFirstResponder];

当应用程序是最前面的应用程序时,一切都按预期工作, 但如果不是,则会出现窗口,但不会成为密钥,我必须单击它才能激活。

我在我的CustomWindow课程中重写:

- (BOOL)canBecomeKeyWindow {

    return YES;
}

可能是什么问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

根据Cocoa Event Handling Guide,只有最前面的应用程序可以具有主窗口和关键窗口状态:

  

当应用程序同时显示主窗口和关键窗口时,   两个窗口的响应者链都可以参与一个动作   信息。正如“窗口分层和Windows的类型”中所述,   主窗口是最前面的文档或应用程序窗口。经常   主窗口也有关键状态,这意味着它们是当前的焦点   用户输入。但是主窗口可以具有辅助窗口或面板   与之关联,例如“查找”面板或“信息”窗口显示   文档窗口中选择的详细信息。当这个次要的   窗口是用户输入的焦点,那么它就是关键窗口。

我没有看到任何解决方法。

编辑:同样来自Window Programming Guide

  

由于密钥窗口属于活动应用程序,因此   突出显示的标题栏具有帮助显示的辅助效果   哪个应用程序当前有效。关键窗口是最多的   在活动应用程序中突出显示窗口,使其成为“关键”   在第二种意义上:它是用户关注的主要焦点   屏幕。