it-roy-ru.com

Лучший способ переключить View Controller в iOS

У меня есть 2 вида контроллеров в моем проекте. Внутри View Controller1 Я хочу переключиться на View Controller 2 нажатием кнопки. В настоящее время я делаю это

- (IBAction)startController2:(id)sender {

viewController1 vc2 = [[viewController2 alloc] init];
self.view = vc2.view;
}

Кажется, это работает нормально, но между нажатием кнопки и появлением контроллера второго вида возникает большая задержка (4 секунды). Если я вызываю viewController2 непосредственно из AppDelegate, вещи загружаются быстрее. Что я тут не так делаю. Любая помощь с благодарностью.

12
user1191140

Несколько вещей, чтобы рассмотреть. 

Часть 1: «Что я здесь не так делаю»?

  1. Вы определенно не хотели делать self.view = vc2.view. Вы просто помещаете один контроллер представления, отвечающий за представление другого контроллера представления. То, что вы, вероятно, хотели сказать, было [self.view addSubview:vc2.view]. Уже одно это может решить вашу проблему, НО ...

  2. На самом деле не используйте это решение. Хотя это почти напрямую из примеров в некоторые популярные книги по программированию iPhone , это плохая идея. Прочитайте "Злоупотребление UIViewControllers" , чтобы понять, почему.

Часть 2: Что вы должны делать

Это все в главе «Представление контроллеров представления от других контроллеров представления»

Это будет сводиться к либо:

  • uINavigationController (см. превосходное руководство Apple по ним здесь ), а затем вы просто [navigationController pushViewController:vc2]

  • «управляемый вручную» стек модальных контроллеров представления, как andoabhay предлагает

  • явное добавление VC как дочернего элемента другого, как Джейсон предлагает

39
ckhan

Вы должны рассмотреть возможность использования UINavigationController для переключения контроллеров представления. Если ваша цель сборки - iOS 5.0+, вы также можете использовать новую концепцию контейнера контроллера: [mainViewController addChildViewController:childViewController].

4
Jason

Используйте presentModalViewController следующим образом

[self presentModalViewController:vc2 animated:YES completion:^(void){}];

и в использовании viewController1 

[self dismissModalViewControllerAnimated:YES completion:^(void){}];

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

2
androabhay
[aController presentViewController:bController animated:NO completion:nil];
[bController presentViewController:cController animated:NO completion:nil];

когда вы хотите закрыть cController, вы можете сделать это

[aController dismissViewControllerAnimated:NO completion:nil];

это блок-схема.

aController → bController → cController
    ↑___________________________↓
0
广锅锅