Пользовательский вид аксессуаров для 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, во всплывающем меню стандартного формата файлов.