Подтвердить что ты не робот

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

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

- (IBAction)startController2:(id)sender {

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

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

4b9b3361

Ответ 1

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

Часть 1: "Что я делаю неправильно здесь?"

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

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

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

Все в главе "Представление контроллеров просмотра из других контроллеров просмотра" .

Это сведено к следующему:

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

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

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

Ответ 2

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

Ответ 3

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

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

а в viewController1 используйте

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

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

Ответ 4

[VCA presentViewController:VCB animated:NO completion:nil];
[VCB presentViewController:VCC animated:NO completion:nil];

когда вы хотите удалить VCC, вы можете сделать это следующим образом

[VCA dismissViewControllerAnimated:NO completion:nil];

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

VCA → VCB → VCC
 ↑___________↓

Ответ 5

Вы должны использовать UINavigationController для переключения контроллеров представлений.

Вы находитесь в режиме просмотра1 и добавьте следующий код в метод нажатия кнопки.

View2 *View2Controller = [[View2 alloc] initWithNibName:@"View2" bundle:nil]; [self.navigationController pushViewController:view2Controller animated:YES];