Различные меню в приложениях на основе документов


У меня есть приложение cocoa, основанное на NSDocument, у меня есть два типа документов. Каждый тип документа имеет свои собственные пункты меню, все пункты определяются в mainmenu.xib. Как определено в руководстве по пользовательскому интерфейсу Apple, пункты меню, не относящиеся к типу doc, отображаются серым цветом.

У меня слишком много пунктов меню, поэтому я хочу показать только соответствующие пункты для каждого типа doc, другая проблема создается связыванием клавиш, для типа doc a определенная привязка клавиш связана с элементом меню, но для типа doc B та же самая привязка клавиш связан с другим пунктом меню, но это невозможно, потому что XCode обнаруживает, что тот же ключ уже используется, и он удаляет (правильно) из предыдущего определения элемента.

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

Существуют ли лучшие практики? Например, разбиение меню. Как я могу легко создать меню, подобное меню редактора XCode? Какой АПИ какао дает нам это сделать?

1 2

1 ответ:

Вы можете создать отдельное меню(ы) в главном меню.xib и создавать выходы к ним из контроллера приложения. Затем, когда ваш документ получит фокус (см. windowDidBecomeMain (Ссылка )), вы говорите контроллеру приложения, чтобы он отключил соответствующие части главного меню.

Переключение частей главного меню осуществляется путем траления иерархии главного меню и назначения отдельного меню в нужном месте (т. е. [NSMenuItem setSubmenu:] (Ссылка ). Вы можете сделать это проще для себя, установив теги, используя построитель интерфейса, в этих пунктах меню, а затем с помощью [NSMenu itemWithTag:] (Ссылка ), чтобы найти их программно.