Рекомендации, необходимые для разработки многооконных приложений Mac - PullRequest
3 голосов
/ 14 марта 2012

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

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

example

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

Например, каждый NSDocument можетиметь значение цвета, которое можно установить в окне, показанном при нажатии на представление A, и некоторые текстовые строки, которые можно установить в окне, показанном при нажатии на представление B.

Итак, вопросы:

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

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

РЕДАКТИРОВАТЬ:

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

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

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

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

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

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

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

Итак, вернемся к вашим вопросам:

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

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

0 голосов
/ 26 марта 2017

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

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