2

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

[self.myCustomWindow makeKeyAndOrderFront:sender];

然后设置第一响应者

[self.myTextField becomeFirstResponder];

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

我在CustomWindow课堂上重写:

- (BOOL)canBecomeKeyWindow {

    return YES;
}

可能是什么问题?

谢谢!

4

1 回答 1

0

根据Cocoa 事件处理指南,只有最前面的应用程序才能拥有主窗口和关键窗口状态:

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

我看不出有什么办法。

编辑:也来自Window Programming Guide

由于关键窗口属于活动应用程序,因此其突出显示的标题栏具有帮助显示当前处于活动状态的应用程序的辅助效果。关键窗口是活动应用程序中标记最显着的窗口,使其具有第二种意义:它是用户注意力在屏幕上的主要焦点。

于 2014-07-29T10:11:18.743 回答