Как я выключаю Представления в приложении Какао?

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

Во-первых, у меня есть главное меню (Запустите Игру, Рекорды, Выход). Затем мне нужно окно для каждого экрана (Экран Gameplay, экран Highscore).

То, с чем я запутываюсь, - то, как разработать это. Я искал NSViewController, думая, что он справляется с представлениями, но он не делает. Это только справляется с одним представлением путем загрузки его действительно. Я не понимаю, почему я должен был бы использовать NSViewController затем. У меня не могло только быть класса окна, который содержит несколько подклассов NSView, и загрузите их как этот? Я не уверен, что понимаю цель ViewController.

Мой Класс Окна должен действительно разделить NSWindowController на подклассы? Я пытался последовать примеру примера ViewController Apple, и он имеет класс контроллера окна, это - подкласс NSWindowController. Я не вижу то, что цель имела разделение на подклассы этого. Весь NSWindowController, кажется, добавляет, - initWithPath:(NSString *)newPath но мне не удается видеть использование в том также, когда я могу просто отредактировать plist файл для открытия окна на запуске. Пример Apple также имеет переменную NSView и переменную NSViewController. Вам не только нужна одна переменная для хранения текущего представления?

Заранее спасибо парни, я действительно смущен относительно того, как это работает.

8
задан David Garcia 17 July 2010 в 18:08
поделиться

3 ответа

Похоже, вы пытаетесь поменять местами представление содержимого в окне? В этом случае вы можете использовать - [NSView replaceSubview: with:] с - [NSWindow contentView] в качестве получателя.

Предположим, у вас есть титульная страница с именем titleView и страница меню с именем menuView , и вы хотите поменять местами их в главном окне приложения и из него. Если титульная страница видна и пользователь нажимает кнопку или ссылку «главного меню», вы должны поместить что-то вроде этого в метод делегата кнопки:

[[[NSApp mainWindow] contentView] replaceSubview:titleView with:menuView];

Две вещи, о которых нужно знать:

  1. Старое представление, titleView в этом случае освобождается этим вызовом. Если вы хотите, чтобы он оставался доступным, вам придется сохранить его перед заменой.
  2. Родительское представление не изменится, если ваши страницы имеют разные размеры. Изменить размер кадра окна и, следовательно, contentView достаточно просто, но вы можете добавить в микс немного базовой анимации, чтобы придать ему некоторый стиль.

Надеюсь, это поможет!

6
ответ дан 5 December 2019 в 14:00
поделиться

Вы используете NSWindowController и NSViewController для управления окном или представлением, потому что вам нужно создавать подклассы NSWindow или NSView только для новых "видов" окна или представления. Например, если вы хотите использовать круглое окно, вы должны создать подкласс NSWindow. Если вы просто хотите иметь элементы управления в окне, вы подклассифицируете NSWindowController.

То же самое с NSViewController: Как правило, представление NSViewController будет принадлежать какому-то базовому классу, например NSView (или, возможно, вашему собственному подклассу NSView, который рисует пользовательский фон). NSViewController управляет взаимодействием между вложенными представлениями этого представления, позволяя ему действовать как единое целое в вашем большом приложении.

Подумайте об этом следующим образом: Представления рисуют, и они превращают необработанные события ввода в действия более высокого уровня. Контроллеры предоставляют информацию представлениям и обрабатывают действия.

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

5
ответ дан 5 December 2019 в 14:00
поделиться

Используйте следующие функции, определенные в UIVew (который является частью вашего существующего окна)

- (void)addSubview:(UIView *)view
- (void)removeFromSuperview
1
ответ дан 5 December 2019 в 14:00
поделиться