Переключать представления на той же вкладке в панели вкладок БЕЗ использования контроллера навигации - PullRequest
0 голосов
/ 23 августа 2011

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

Я пробовал что-то вроде этого:

FooViewController *fooViewController = [[FooViewController alloc] initWithNibName:@"FooViewController" bundle:nil];
self.view.window.rootViewController.view.window.rootViewController = fooViewController;
[fooViewController release];

А это:

FooViewController *fooViewController = [[FooViewController alloc] initWithNibName:@"FooViewController" bundle:nil];
[self.view removeFromSuperview];
[self.view addSubview:fooViewController.view];
[fooViewController release];

Безрезультатно.

Есть идеи?

1 Ответ

2 голосов
/ 05 ноября 2013

Метод, который я использовал, заключался в создании подкласса UIViewController, который я использовал в качестве корневого представления для 3 дочерних контроллеров представления. Известные свойства корневого контроллера были:

  • viewControllers - NSArray контроллеров представления, между которыми я переключился
  • selectedIndex - индекс выбранного контроллера представления, который был установлен в 0 в viewLoad. Это неатомично, поэтому, когда вызывался setSelectedIndex, он делал всю логику, чтобы установить этот дочерний контроллер представления.
  • selectedViewController - свойство только для чтения, чтобы другие классы могли определять, что в данный момент отображается

В методе setSelectedIndex вам необходимо использовать логику, подобную:

[self addChildViewController: selectedViewController];
[[self view] addSubview: [selectedViewController view]];
[[self view] setNeedsDisplay];

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

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

for (UIViewController *viewController in [self childViewControllers])
    [viewController removeFromParentViewController];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...