Показать лист для нового окна документа

Когда пользователь создает новый документ в моем приложении Cocoa на основе NSDocument, я хочу, чтобы в новом окне документа отображался лист, на котором пользователь может установить некоторые начальные параметры документа.

Однако этот лист не должен отображаться, если существующий документ загружается через Файл > Открыть.

Есть ли какой-либо существующий механизм, к которому я могу подключиться для реализации этого? Или любой рекомендуемый способ сделать это?


person tajmahal    schedule 02.12.2012    source источник


Ответы (2)


Переопределить initWithType:error: в подклассе NSDocument.
Из документации (см. Справочник класса NSDocument):

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

person Jay    schedule 02.12.2012
comment
Спасибо! Где я могу поместить вызов метода beginSheet... моего листа? Если я поставлю его в initWithType:error:, лист отобразится в отдельном окне, не прикрепленном к окну документа как лист. - person tajmahal; 02.12.2012

Джей правильно указал в своем ответе, что для определения того, представляет ли экземпляр подкласса NSDocument новый документ, а не загруженный из файла, initWithType:error: должен быть переопределен, что вызывается только для новых документов. Но запустить лист там, к сожалению, не получится, так как в точке initWithType:error: окно еще не создано.

Недостающая ссылка для того, чтобы заставить эту работу работать, — вместо этого установить переменную экземпляра с именем, например. с newDocument по YES в initWithType:error:. Фактический вызов [NSApp beginSheet:…] должен быть сделан в windowDidBecomeKey:. Также переменная newDocument там должна быть установлена ​​в NO, чтобы предотвратить повторное появление листа каждый раз, когда окно снова становится ключевым.

person tajmahal    schedule 18.12.2012
comment
Хороший ответ; это работает очень хорошо для меня. :) ... в некоторых случаях может потребоваться проверить, существуют ли настройки документа, а затем открыть лист даже для загруженных документов (но только один раз, конечно) - person ; 10.10.2014