Добавление дополнительного представления на панель сохранения NSDocument в дополнение к всплывающей кнопке собственного типа файла

#cocoa #macos #nsdocument

#cocoa #macos #nsdocument

Вопрос:

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

Теперь у меня есть другое представление, которое я хотел бы включить в панель сохранения, но если я просто переопределю -[NSDocument prepareSavePanel:] и использую -setAccessoryView: для вставки своего собственного представления, оно заменяет всплывающую кнопку типа файла, поэтому на панели сохранения отображается только мое представление, а не всплывающая кнопка.

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

Ответ №1:

Нет, значительно лучшего способа нет. Может быть немного проще / приятнее:

  1. Создайте всплывающее окно типа файла в вашем собственном окне дополнительного представления
  2. Во время выполнения найдите NSSavePanel существующее всплывающее окно вспомогательного представления,
  3. Вызовите setTarget: / setAction: / setMenu: в вашем всплывающем окне с аргументами, извлеченными из того, как установлено существующее всплывающее окно.

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