Ich habe 2 Ansichtscontroller in meinem Projekt. Inside View Controller1 Ich möchte per Tastendruck zu View Controller 2 wechseln. Momentan mache ich das
- (IBAction)startController2:(id)sender {
viewController1 vc2 = [[viewController2 alloc] init];
self.view = vc2.view;
}
Dies scheint gut zu funktionieren, aber es gibt eine große Verzögerung (4 Sekunden) zwischen dem Drücken der Taste und der Anzeige der zweiten Ansicht. Wenn ich den viewController2 direkt von AppDelegate aus anrufe, werden die Dinge schneller geladen. Was mache ich hier falsch? Jede Hilfe wird sehr geschätzt.
Einige Dinge zu beachten.
Sie wollten definitiv nicht self.view = vc2.view
. Sie haben nur einen View-Controller für die Ansicht eines anderen View-Controllers verantwortlich gemacht. Was Sie wahrscheinlich sagen wollen, war [self.view addSubview:vc2.view]
. Dies allein könnte Ihr Problem beheben,ABER...
Verwenden Sie diese Lösung nicht wirklich. Obwohl es fast direkt aus den Beispielen in einigen populären iPhone-Programmierbüchern stammt, ist es eine schlechte Idee. Lesen Sie "Missbrauch von UIViewControllers" , um zu verstehen, warum.
Alles steht im Kapitel "Darstellen von View-Controllern von anderen View-Controllern" .
Es kommt darauf an, entweder:
einen UINavigationController (siehe den exzellenten Apple-Guide hier ) und dann [navigationController pushViewController:vc2]
ein "manuell verwalteter" Stapel von modalen View-Controllern, wie andoabhay vorschlägt
ein VC explizit als untergeordnetes Element eines anderen hinzufügen, wie jason vorschlägt
Sie sollten erwägen, UINavigationController
zu verwenden, um die Ansichtssteuerungen zu wechseln. Wenn Ihr Gebäudeziel iOS 5.0 oder höher ist, können Sie auch das neue Controller-Container-Konzept verwenden: [mainViewController addChildViewController:childViewController]
.
Verwenden Sie presentModalViewController
wie folgt
[self presentModalViewController:vc2 animated:YES completion:^(void){}];
und im viewController1
verwenden
[self dismissModalViewControllerAnimated:YES completion:^(void){}];
wo auch immer Sie zum vorherigen Controller zurückkehren möchten.
[aController presentViewController:bController animated:NO completion:nil];
[bController presentViewController:cController animated:NO completion:nil];
wenn Sie cController verwerfen möchten, können Sie dies tun
[aController dismissViewControllerAnimated:NO completion:nil];
dies ist das Flussdiagramm.
aController → bController → cController
↑___________________________↓