0
在SO上也有类似的问题,但这有一个转折。单击_statusItem时执行动作,带有NSMenu并且窗口未对焦似乎不可能
我需要触发一个动作,当用户点击我的应用程序图标坐在菜单栏上。该行动是将其窗口前面,或者换句话说,
[[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self];
通常我会做到这一点:
[_statusItem setTarget:self];
[_statusItem setAction:@selector(bringToFront:)];
但这_statusItem
有NSMenu
。
如果我禁用菜单,bringToFront:
被触发。
所以我想,我会执行NSMenuDelegate
方法menuWillOpen
。
- (void)menuWillOpen:(NSMenu *)menu {
[[[NSApplication sharedApplication] keyWindow] makeKeyAndOrderFront:self];
}
但是有一个问题。这将工作,如果应用程序窗口是所选的一个,但假设该应用程序正在运行,我选择Safari浏览器。然后,我的应用程序的窗口不再是焦点,是在2000 Safari窗口后面。现在我点击菜单栏上的应用程序图标,menuWillOpen
将不会被触发。
如果我想通过点击菜单栏上应用程序的图标使窗口关注,必须使窗口关注以使其工作无效。
'NSApplication'通知会响应您的应用获取/退出活动状态而发布。您是否尝试过启用/禁用状态项目的菜单以响应这些菜单? – CRD
我该怎么做? – SpaceDog
做什么部分?阅读“NSApplication”文档以获取通知的详细信息。 – CRD