Как разместить контроллеры панели вкладок внутри контроллеров представления, а не делегата? - PullRequest
0 голосов
/ 09 марта 2011

У меня есть очень простое приложение для iphone, в котором выполняются следующие шаги.

  1. App Delegate, который загружает ...
  2. Контроллер корневого представления игры (это всего лишь 2 кнопки «начать игру» и «продолжить игру»)
  3. При нажатии кнопки запуска игры загрузите RootViewController.
  4. Root View Controller с контроллером панели вкладок ??

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

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

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

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

Я несколько раз пытался заставить контроллер панели вкладок показаться безрезультатным.

Например, в моем GameRootViewController внутри кнопки, если я делаю это;

-(IBAction) btnPress {

    RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

    [self.view addSubview:root.tabBarController.view];

    [root release];
}

Ничего не появляется.

Если я попробую обычный способ:

[self.view addSubview:root.view];

Отображается вид, но я никогда не вижу контроллер панели вкладок.

Это меня очень смущает.

Я думаю, что игры / приложения могли бы сделать это:

  1. Делегат приложения
  2. Загрузить все заставки, кредиты, сделанные ... и т. Д.
  3. Загрузите стартовую игру, продолжите игровой экран и выполните действия, которые они создают
  4. Заставить окно делегата приложения добавить контроллер панели вкладок в окно self.window.

Но я не уверен. Я хочу уточнить / понять, могу ли я размещать контроллеры панели вкладок внутри контроллеров представления или они могут использоваться только внутри делегата приложения?

1 Ответ

3 голосов
/ 09 марта 2011

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

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

navigationController (rootViewController)
    -->TabBarController(secondController)
        -->tabViewController1
        -->tabViewController2
        -->tabViewController3

Итак, первым видимым вами представлением является вид кнопки, который управляется rootController элемента navigationController. После выбора кнопки он помещает TabViewController в стек навигации, который отображает панель вкладок с выбранной вкладкой по умолчанию. (Обратите внимание, что вам придется скрыть панель навигации, чтобы сделать стек навигации невидимым для пользователя.)

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