Наведение мыши NSMenu на событие

Я использовал NSMenu и NSStatusItem для отображения пользовательского меню в строке состояния в течение длительного времени следующим образом:

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

Он отлично работает, если начать щелкать значок изображения. Но я заметил, что меню Apple, расположенное в строке состояния, может быть вызвано простым перемещением мыши, например, меню аэропорта, меню питания, языковое меню и меню даты/времени. Все они автоматически всплывают, когда вы наводите курсор мыши. Как они это получили?

Я проверил «добавить прямоугольник отслеживания» для NSView с событием «mouseEntered», но, как мне кажется, все не так сложно.

Любой совет?


person Jiulong Zhao    schedule 25.08.2011    source источник


Ответы (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 (или любые другие, которые вы хотите)

person lannerk    schedule 27.03.2012