2010-11-01 3 views
1

Я разрабатываю приложение на основе документа. Каждый документ имеет три окна (и, следовательно, три оконных контроллера). Я бы хотел настроить его так, чтобы два из трех окон были разделены между разными открытыми документами (при необходимости меняя их виды). Это возможно? Может ли кто-нибудь указать мне в правильном направлении (документация или примеры)?приложение на основе какао-документов с общими окнами?

Спасибо!

ответ

2

В этом случае эти общие оконные контроллеры не должны принадлежать ни одному документу (поскольку каждый документ будет иметь свою собственную пару «общих» окон), но должен быть независимым, вероятно, принадлежащим делегату приложения или Делопроизводитель. Возможно, вы также захотите сделать панели окон, в качестве инспектора.

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

Практически любой учебник о том, как сделать окно инспектора, поможет вам здесь.

+0

Это имеет смысл для меня. Благодарю. Я предполагаю, что концептуально я всегда думал, что документ должен владеть контроллерами окон. –

0

Похоже, что вам нужно переопределить -makeWindowControllers в вашем NSDocument подклассе для создания контроллеров, которые вы хотите, вызывая -addWindowController: на подклассе NSDocument, чтобы добавить ваши общие контроллеры окна.

Мне еще не приходилось это делать, но это те методы, на которые я бы смотрел.

Из ссылки класса NSDocument Apple:

makeWindowControllers

Подклассы могут переопределить этот метод для создания начального контроллера окна (ов) для документа.

- (void)makeWindowControllers

Обсуждение

Реализация базового класса создает объект NSWindowController с windowNibName и с документом в качестве владельца файла, если windowNibName возвращает имя. Если вы переопределите этот метод для создания собственных оконных контроллеров, обязательно используйте addWindowController: чтобы добавить их в документ после их создания.

Этот метод вызывается методами NSDocumentController open ..., но вы можете захотеть вызвать его напрямую в некоторых случаях.

+0

Вопросник говорит, что два окна - это общие окна, поэтому их оконные контроллеры также должны быть разделены. Я не думаю, что добавление одних и тех же оконных контроллеров в несколько документов будет хорошо, особенно потому, что NSWindowController ожидает, что будет принадлежать только одному документу. –

0

Возможно, но с вашей стороны потребуется нетривиальное количество работ. В итоге вот что вам нужно сделать:

  • Override setDocument: в контроллере окна и поддерживать ассоциации, которые он имеет к каждому документу.
  • Убедитесь, что каждый оконный контроллер (NSWindowController) отсоединяется от документа до. Окно закрыто. То же самое относится к каждому контроллеру представления, который может обрабатывать представления внутри окна.
  • Подкласс контроллера документа (NSDocumentController) и позаботьтесь о закрытии документа, чтобы убедиться, что окна с несколькими документами отделены от документов до того, как какой-либо из документов будет закрыт.NSDocumentController - одноэлементный и, следовательно, вам нужно добавить экземпляр в ваш файл MainMenu.xib, чтобы заменить его по умолчанию.

Вы можете прочитать мой step-by-step guide how to add support for multi-document window controllers here.