Пользовательский вид аксессуаров для NSSavePanel NSDocument

Рассмотрим какао NSDocument который поддерживает два типа документов (например, BMP и JPEG). В то время как один тип не имеет параметров сохранения (например, BMP), другой - нет (например, уровень сжатия для JPEG).

Как вы реализуете это?

Я понимаю, что вы должны переопределить prepareSavePanel: и установить вспомогательный вид данного NSSavePanel, Однако при этом заменяется вспомогательное представление по умолчанию на всплывающее окно с типом документа.

Необходимо ли заново создавать всплывающее окно с типом документа, если при использовании настраиваемого представления аксессуаров?

Если да, как передать выбранный тип документа и дополнительные параметры сохранения в NSDocument написать методы?

Если нет, как я могу показать дополнительные параметры сохранения (например, уровень сжатия), только если был выбран соответствующий тип документа (например, JPEG)? Есть ли метод делегата для изменения типа документа в NSSavePanel?

1 ответ

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

Можно было бы предоставить свой собственный вид аксессуара в -prepareSavePanel: а затем переопределить -fileTypeFromLastRunSavePanel вернуть выбранный тип. Тем не мение, NSDocumentДокументы не дают никаких обещаний, что это будет уважать, досадно. Попробуйте и посмотрите!

если это не сработает, похоже, вам нужно предоставить собственную реализацию -runModalSavePanelForSaveOperation:delegate:didSaveSelector:contextInfo:, Следуйте Apple, описание метода:

Реализация по умолчанию этого метода сначала гарантирует, что любой редактор, зарегистрированный с использованием неофициального протокола NSEditorRegistration Cocoa Bindings, зафиксировал свои изменения, затем создает панель сохранения, добавляет стандартное вспомогательное представление "формат файла", если существует более одного типа файла для пользователь выбирает, и [self shouldRunSavePanelWithAccessoryView] возвращает YES, устанавливает различные атрибуты панели, вызывает [self prepareSavePanel:theSavePanel], чтобы предоставить возможность для настройки, затем представляет панель. Если пользователь одобряет панель -saveToURL:ofType:forSaveOperation: делегат:didSaveSelector:contextInfo: вызывается.

Документы для -writableTypesForSaveOperation: сделать примечание:

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

Другие вопросы по тегам