我的应用只有菜单栏图标。
我能听到菜单栏物品:(IBAction) preferencesMenuItemClick:(id)sender
但是我怎么能听到菜单栏图标呢?
没有可用的已发送操作。
感谢您的帮助。
答案 0 :(得分:2)
如果您只是想在用户点击菜单栏图标(实际上是状态项)时收到通知,您可以使用NSMenuDelegate
menuWillOpen:
方法。即将打开状态菜单时将调用此选项,这与单击状态项本身相同。
请注意,这仅适用于状态项目菜单。如果您使用的是NSView或任何其他可能的组合,则必须使用类似的方法(loadView)。
答案 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];
}
}