Соединение NSMenuItems с действиями и наоборот

Позвольте мне объяснить, что я имею в виду:

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

Какова предлагаемая реализация (привязки? Я не знаю...), чтобы я мог удовлетворить следующие сценарии:

  • Пользователь щелкает пункт меню, и это запускает действие doSomething на каком-то контроллере. Кроме того, при независимом вызове действия doSomething следует отметить и соответствующий пункт меню.

  • У нас есть идентичное меню (где-то еще) с теми же опциями, что и исходное меню. Пользователь нажимает на пункт меню А, этот же пункт проверяется в меню Б, выполняется действие doSomething. Это должно работать в любом порядке действий (A->B->действие, B->A->действие, действие->A->B)


person Dr.Kameleon    schedule 23.03.2012    source источник


Ответы (2)


-doSomething: следует установить переменную BOOL, указывающую, следует ли проверять элементы меню.

Используйте протокол NSUserInterfaceValidations, как я объяснил в ответе на ваш предыдущий вопрос.

В -validateUserInterfaceItem: получите значение этого BOOL, затем:

[(NSMenuItem*)anItem setState:(boolValue ? NSOnState : NSOffState)];
person Kurt Revis    schedule 23.03.2012
comment
Большое спасибо за ваш ответ! :-) Я понял. - person Dr.Kameleon; 23.03.2012
comment
Какой здесь синтаксис (boolValue ? NSOnState : NSOffState)? Как называется этот формат и где я могу прочитать о нем больше? - person ck_; 04.04.2012
comment
Это условный оператор, который является частью языка C. - person Kurt Revis; 04.04.2012

Я бы хотел, чтобы каждый пункт меню вызывал свой собственный метод действия, чтобы каждый метод действия устанавливал переменную экземпляра в значение в зависимости от того, какое оно есть, и реализовывал метод для неофициального протокола NSMenuValidation, а мы, чтобы обновить элемент меню, чтобы показать его галочка, а также обычное включение/выключение.

person Nathan Day    schedule 23.03.2012
comment
Большое спасибо за ваш ответ! :-) - person Dr.Kameleon; 23.03.2012