2010-11-04 2 views
1

В приложении на основе документов на какао, как лучше всего сохранить состояния элементов меню в строке меню в синхронизации с текущим видимым документом?Одновременно открываются несколько документов, каждый из которых имеет разные позиции в меню.

Например, у вас есть документ с изображением линейки, который может быть скрыт/показан через элементы меню «Показать линейки» (выключено) и «Скрыть линейки» (в состоянии). Пользователь одновременно открывает два документа. Он скрыл правителей в одном документе, но не с другой. Когда пользователь перемещается между документами, элемент меню должен отражать состояние для этого документа, а не для приложения в целом.

Как это сделать чисто? Я googled вокруг, но не похоже, что есть предопределенный «из коробки» способ сделать это. Было бы неплохо, если бы NSDocument имел какой-то метод типа didRegainFocus, в который можно добавить такую ​​логику.

Моя фактическая реализация немного сложнее, поскольку на самом деле это NSViewController внутри моего NSDocument, который имеет дело с этими конкретными пунктами меню.

@interface MyDocument : NSDocument { 
    SomeViewController *myCustomizedTextViewController; 
} 

Когда MyDocument является в настоящее время активный документ, мне нужны методы myCustomizedTextViewController для обеспечения состояния пары NSMenuItem с в главном меню приложения. Один из них действительно правитель. Другая аналогичная временная установка.

+0

Спасибо за этот вопрос, мне было интересно то же самое при запуске приложения. – ptrico

ответ

1

Имейте цель пунктов меню реализовать метод validateUserInterfaceItem:, чтобы включить/отключить их. См. Ссылку User Interface Validation для получения дополнительной информации.

+0

Так просто, спасибо! Я полностью переусердствовал и думал о методах NSWindowDelegate и других передовых решениях. Я прочитал документацию NSUserInterfaceItemValidations и полностью пропустил это намерение. Сейчас он работает как сон, приветствует :) – d11wtq