NSMenu的鼠标悬停在事件上

时间:2011-08-25 23:57:56

标签: mouseover nsmenu

我使用NSMenu和NSStatusItem以这种方式长时间在状态栏上显示自定义菜单:

statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:18] retain]; [statusItem setImage:[NSImage imageNamed:@"myIcon"]]; [statusItem setMenu:myMenu]; [statusItem setHighlightMode:NO]; ...

开始点击图片图标即可正常工作。 但我注意到状态栏上的苹果菜单可以通过鼠标移动简单触发,如机场菜单,电源菜单,语言菜单和日期/时间菜单。 当鼠标走过时,它们都会自动弹出。 他们是怎么得到的?

我已经使用“mouseEntered”事件检查了NSView的“添加跟踪矩形”,但事情并不像我想的那么困难。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为statusItem不是受支持的鼠标事件,但您可以设置statusItem的视图并覆盖鼠标偶数方法以支持鼠标事件,如下所示:

statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
  NSButton *nb = [[NSButton alloc] init]; 
  [nb setImage:image];
  [nb setAction:@selector(statusItemClick:)];  
  [_statusItem setView:nb];

这里只是一个将视图设置为statusitem的示例,如果要支持鼠标事件,您的视图必须扩展相同的视图并创建NSTrackingArea并实现moveMoved,mouseEntered和mouseExited方法(或者您想要的任何一个)