Несколько документов в одном окне в какао - PullRequest
8 голосов
/ 13 июля 2009

Я хочу написать приложение, которое может иметь несколько документов в одном окне через интерфейс с вкладками. Следует ли мне избегать архитектуры NSDocument (шаблон приложения на основе документа Какао)? Насколько я могу судить, он поддерживает только одно или несколько окон на документ, но не наоборот.

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

РЕДАКТИРОВАТЬ: я хочу иметь окна документа проекта в дополнение к основным окнам документа. На этом уровне сложности стоит ли взламывать архитектуру NSDocument? Apple написала Xcode (который работает таким образом), используя архитектуру NSDocument?

Ответы [ 4 ]

6 голосов
/ 28 июля 2012

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

Я только что нашел интересное руководство, прочитав справку Cocoadev Document Based с одним окном для всех документов . Из ответа MikeTrent кажется, что использование NSDocument - очень жизнеспособный путь. Вам просто нужно создать подкласс NSDocumentController.

Мне также нравится Идея Абхи использовать дочернее окно без полей.

4 голосов
/ 13 июля 2009

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

Вполне вероятно, что вам придется не только создавать подкласс NSDocument, но и реже иметь подкласс NSDocumentController. После того, как это будет сделано, должно быть очень просто перехватить и избежать вызовов -makeWindowControllers и других методов, связанных с окнами, что позволит вам обернуть «окна» документа любым удобным для вас способом, но при этом сохранить преимущества документа. на основе приложения.

3 голосов
/ 13 июля 2009

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

2 голосов
/ 05 февраля 2012

Еще один метод, который я еще не пробовал, но планирую, - создать окно без полей для каждого документа. Таким образом, один документ имеет одно окно, которое может быть или не быть видимым.

Затем создайте окно-обертку, содержащую фактическую границу окна, и любые элементы управления для переключения между тем, какие окна / окна документа без полей видны. Окно документа является дочерним окном оболочки, которое гарантирует, что оба будут связаны, когда окно будет перемещено / свернуто / закрыто / и т. Д.

Для каждого окна документа без полей окно-обертка имеет вид заполнителя, который при изменении размера будет изменять размер окна документа, а также вставлять представление окна документа в цепочку респондента (любое событие, отправленное в представление заполнителя, будет отправлено в представление окна документа, прежде чем перейти к родительскому представлению заполнителя).

Есть еще несколько мелких деталей, но я думаю, что этот подход будет работать хорошо.

...