wake-up-neo.net

Am besten wechseln Sie den View Controller in iOS

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.

12
user1191140

Einige Dinge zu beachten. 

Teil 1: "Was mache ich hier falsch"?

  1. 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...

  2. 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.

Teil 2: Was Sie tun sollten

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

39
ckhan

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].

4
Jason

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. 

2
androabhay
[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
    ↑___________________________↓
0
广锅锅