2012-03-14 3 views
3

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

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

example

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

Для примера, каждый NSDocument может иметь значение цвета, которое может быть установлено в окне, показанном щелкнув вид А, а некоторые текстовые строки, которые могут быть установлены в окне показано, нажав вид B.

Так возникают следующие вопросы:

  1. Уместно ли использовать один подкласс класса NSDocument для каждого DoC# 1 и DoC# 2?
  2. Какие классы следует использовать для настройки приложения, как показано на рисунке? NSWindowController? NSWindow? NSPanel?

Я только ищу руководство по чтению, поэтому любые указатели оцениваются.

EDIT:

Чтобы прояснить это дальше, я хочу, чтобы иметь вид таблицы, где кнопки (Вид A & B), и, щелкая по ним, они будут вызывать другое окно/вид, чтобы изменить его содержимое.

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

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

+1

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

+0

См. Мое редактирование выше. Да, ваше объяснение звучит правильно. Но я думал, что мне нужно несколько NSWindowControllers, или нет? – TigerCoding

+0

См. Мой ответ. Вам нужно несколько NSViewControllers. – Roger

ответ

2

Для достижения желаемого вам нужно одно окно (NSWindow), один оконный контроллер и различные виды, каждый со своим собственным контроллером. Есть несколько способов, вы могли бы установить это, все в зависимости от ваших требований:

  • Вы должны были бы по крайней мере, 3 просмотров (экземпляры NSView): один для выбора класса документа, один для зрения выбор и один для контента. Каждое представление контролируется контроллером вида (экземпляр NSViewController). Кроме того, вы можете отключить просмотр в виде разделенных видов (NSSplitView), чтобы ваш пользователь мог изменять размер недвижимости, доступной для каждого вида.

  • У вас есть одно окно с контроллером окна. Если вы выбираете шаблон приложения на основе документов в Xcode, Xcode будет генерировать подкласс NSDocument, который вы можете использовать в качестве своего оконного контроллера (или использовать Core Data, а Xcode будет генерировать подкласс NSPersistentDocument со всеми наворотами, которые вам нужны для доступа Основные данные для сохранения документов).

Так, чтобы вернуться на свои вопросы:

1: Да, но в зависимости от ваших требований. Если DoC# 1 - это совершенно другая вещь, чем DoC# 2, вам может потребоваться переоценка. Например, DoC# 1 может иметь совершенно разные постоянные требования, чем # 2.

2: Здесь нет единого сценария, но работала для меня: возьмите шаблон проекта для приложения на основе документа (с базовыми данными или без них). Используйте созданный подкласс NSDocument (или NSPersistentDocument) в качестве вашего оконного контроллера. Используйте NSView для реализации представлений в вашем окне, где каждый вид управляется собственным контроллером, который является экземпляром NSViewController.

+0

Большое спасибо за ваш совет. Это помогает совсем немного, поскольку информации об этом я не мог найти. – TigerCoding

0

Я знаю, что это старый вопрос, но способ сделать это так, как вы хотите, будет использовать: ContainerViews и установить их встраивание segue в качестве контроллеров представления, которые вы хотите.

Смежные вопросы