пункт меню включен, но все еще неактивен - PullRequest
12 голосов
/ 02 февраля 2011

У меня есть меню с несколькими пунктами, созданными в конструкторе интерфейсов.Там все выглядит нормально, и проверяется «enable».
Но когда я запускаю приложение, все пункты меню отображаются серым цветом.

Я проверил isEnabled, он возвращает true.

Кроме того, пункты меню, созданные программно (с initWithTitle и без компоновщика интерфейса), работают очень хорошо.

Я что-то здесь упускаю?Я действительно довольно новичок в разработке OSX (на самом деле, это мой первый день).
Спасибо

Ответы [ 3 ]

19 голосов
/ 26 января 2014

Не забудьте установить цель вашего пункта меню:

menuItem.target = self;
  • Если цель элемента меню установлена, то NSMenu сначала проверяет, реализует ли этот объект действие элементаметод.Если это не так, то элемент отключен.Если цель действительно реализует метод действия элемента, NSMenu сначала проверяет, реализует ли этот объект validateMenuItem: или validateUserInterfaceItem: метод.Если это не так, то пункт меню включен.Если это так, то включенный статус пункта меню определяется возвращаемым значением метода.

  • Если цель пункта меню не установлена, а объект NSMenu не является контекстнымменю, то NSMenu использует цепочку респондента для определения цели.Если в цепочке респондента нет объекта, реализующего действие элемента, элемент отключен .

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html

8 голосов
/ 02 февраля 2011

В случае, если кто-то может гуглить и извлекать выгоду, метод 'Действие' был объявлен без параметра :(id)sender:

-(IBAction) quit;

Как ни странно, метод setAction в NSMenuItem съел его и не сделалПожаловаться.Ну хорошо.

3 голосов
/ 02 февраля 2011

Ах, чума использования NSMenu ...

Выезд <NSMenuValidation>.

Обычно реализация будет такой простой:

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
  return [menuItem isEnabled];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...