关于SO也有类似的问题,但这有一个转折。
当用户点击位于菜单栏上的应用图标时,我需要触发操作。行动是将其窗口置于前面,换句话说,
[[[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
。
如果我想点击菜单栏上的应用程序图标来关注窗口,必须让窗口聚焦以使其工作没有意义。
答案 0 :(得分:1)
NSApplication
个通知以响应您的应用获得/退出活动状态。处理这些通知并启用/停用状态项的菜单,以便在您的应用处于后台时调用您的操作。