Objective C - 菜单栏图标点击事件

时间:2014-06-20 08:57:37

标签: objective-c macos cocoa

我的应用只有菜单栏图标。Menubar icon
我能听到菜单栏物品:(IBAction) preferencesMenuItemClick:(id)sender Menubar item

但是我怎么能听到菜单栏图标呢?
没有可用的已发送操作。
XCode Sent Actions

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果您只是想在用户点击菜单栏图标(实际上是状态项)时收到通知,您可以使用NSMenuDelegate menuWillOpen:方法。即将打开状态菜单时将调用此选项,这与单击状态项本身相同。

请注意,这仅适用于状态项目菜单。如果您使用的是NSView或任何其他可能的组合,则必须使用类似的方法(loadView)。

参考:https://developer.apple.com/library/mac/documentation/cocoa/reference/NSMenuDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSMenuDelegate/menuWillOpen

答案 1 :(得分:1)

NSStatusItem有一个setAction:方法,用于设置在单击接收器时发送到接收方目标的选择器。

- (void)setAction:(SEL)action

但是,如果状态项有菜单,则会出现问题:

  

如果接收器具有菜单集,则在单击接收器时不会向目标发送动作;相反,点击会导致菜单出现。

要解决此问题,您可以使用action选择器执行操作或手动显示菜单:

[self.statusItem setAction:@selector(menuAction:)];

...

- (void)menuAction:(id)sender {
    if ( ... ) {
        NSLog(@"Perform non-menu action!");
    } else {
        NSLog(@"Manually open the menu!");
        [self.statusItem popUpStatusItemMenu:menu];
    }
}