Отключение / включение пункта меню приложения - PullRequest
8 голосов
/ 18 января 2010

В попытке изучить самые основы обработки меню. Меню моего тестового приложения имеет 3 меню, а именно: «TestApp», «File» и «Help». Я считаю, что могу полностью удалить эти меню, просто позвонив сказать:

NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];

Однако я бы хотел временно отключить их (выделите серым цветом). Есть ли такой же простой способ сделать это, пожалуйста?

1 Ответ

7 голосов
/ 18 января 2010

Возможно, я неправильно понимаю ваш вопрос, но, похоже, вы хотите иметь возможность выделить серым цветом те заголовки меню, которые отображаются в строке меню системы (например, затенение меню «Файл»). Я не уверен, если это вообще возможно, но это, безусловно, идет вразрез с Руководствами Apple по человеческому интерфейсу :

Название меню отображается без затемнения. даже если все команды меню недоступно (затемнено) одновременно. Пользователи всегда должны иметь возможность просматривать содержимое меню, независимо от того, В настоящее время доступны.

Таким образом, реальное решение проблемы состоит в том, чтобы иметь возможность выделять серым цветом все пункты меню в определенном меню, когда ваше приложение находится в определенном состоянии. Для этого реализует протокол NSUserInterfaceValidations . Требуется только реализация метода - (BOOL)validateUserInterfaceItem:. Как правило, при реализации этого метода вы просто проверяете селектор проверяемого элемента пользовательского интерфейса и возвращаете YES, если он должен быть включен, или NO, если он не должен (который будет затенять пункт меню).

...