2017-07-16 52 views
0

在SO上也有类似的问题,但这有一个转折。单击_statusItem时执行动作,带有NSMenu并且窗口未对焦似乎不可能

我需要触发一个动作,当用户点击我的应用程序图标坐在菜单栏上。该行动是将其窗口前面,或者换句话说,

[[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self]; 

通常我会做到这一点:

[_statusItem setTarget:self]; 
[_statusItem setAction:@selector(bringToFront:)]; 

但这_statusItemNSMenu

如果我禁用菜单,bringToFront:被触发。

所以我想,我会执行NSMenuDelegate方法menuWillOpen

- (void)menuWillOpen:(NSMenu *)menu { 
    [[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self]; 
} 

但是有一个问题。这将工作,如果应用程序窗口是所选的一个,但假设该应用程序正在运行,我选择Safari浏览器。然后,我的应用程序的窗口不再是焦点,是在2000 Safari窗口后面。现在我点击菜单栏上的应用程序图标,menuWillOpen将不会被触发。

如果我想通过点击菜单栏上应用程序的图标使窗口关注,必须使窗口关注以使其工作无效。

+0

'NSApplication'通知会响应您的应用获取/退出活动状态而发布。您是否尝试过启用/禁用状态项目的菜单以响应这些菜单? – CRD

+0

我该怎么做? – SpaceDog

+0

做什么部分?阅读“NSApplication”文档以获取通知的详细信息。 – CRD

回答

1

NSApplication通知发布响应您的应用程序获得/退出活动状态。处理这些通知并启用/禁用状态项目的菜单,以便在应用程序处于后台时调用您的操作。

相关问题