Пользовательский NSView в NSMenuItem не получает события мыши

У меня NSMenu выскочил из NSStatusItem с помощью popUpStatusItemMenu. Эти NSMenuItems показывают кучу разных ссылок, каждая из которых связана с setAction: к openLink: метод цели. Эта договоренность работала хорошо в течение долгого времени. Пользователь выбирает ссылку из меню, и метод openLink: затем обрабатывает ее.

К сожалению, я недавно решил поэкспериментировать с использованием NSMenuItem 's setView: метод, обеспечивающий более приятный интерфейс. По сути, я просто перестал устанавливать заголовок, создал NSMenuItem, а затем использовал setView: для отображения пользовательского представления. Это работает отлично, пункты меню выглядят великолепно, и отображается мой пользовательский вид.

Однако когда пользователь выбирает пункт меню и отпускает мышь, действие больше не работает (то есть openLink: isn 'т называется). Если я просто закомментирую вызов setView :, тогда действия снова будут работать (конечно, пункты меню пустые, но действие выполняется правильно). Мой первый вопрос, поэтому, почему установка представления нарушает NSMenuItem 'действие

Нет проблем, подумал яЯ исправлю это, обнаружив событие mouseUp в моем пользовательском представлении и вызвав мой метод действия оттуда. Я добавил этот метод в свой пользовательский вид:

- (void)mouseUp:(NSEvent *)theEvent {
  NSLog(@"in mouseUp");
  }

Нет кости! Этот метод никогда не вызывается.

Однако я могу установить отслеживание ректов и получать mouseEntered: события. Я поставил несколько тестов в моей программе mouseEntered следующим образом:

if ([[self window] ignoresMouseEvents]) {  NSLog(@"ignoring mouse events");  }
else {  NSLog(@"not ignoring mouse events");  }
if ([[self window] canBecomeKeyWindow]) {  dNSLog((@"canBecomeKeyWindow"));  }
else {  NSLog(@"not canBecomeKeyWindow");  }
if ([[self window] isKeyWindow]) {  dNSLog((@"isKeyWindow"));  }
else {  NSLog(@"not isKeyWindow");  }

И получил следующие ответы:

not ignoring mouse events
canBecomeKeyWindow
not isKeyWindow

Это проблема? "не isKeyWindow "? Предположительно это нене хорошо, потому что Apple,документы говорятЕсли пользователь нажимает на представление, которое неВ ключевом окне по умолчанию окно переносится и делается ключом, но событие мыши не отправляется. " Но должен быть способ обнаружить эти события. КАК?

Добавление:

[[self window] makeKeyWindow];

не имеет никакого эффекта, несмотря на то, что canBecomeKeyWindow имеет значение YES.

Ответы на вопрос(6)

Ваш ответ на вопрос