Entlassen vorherigen modal-view-controller in der aktuellen view-controller
Ich habe derzeit 3 ViewControllers: LoginViewController
, SignUpViewController
und MainViewController
.
Wenn der Benutzer die app öffnet, LoginViewController
vorgestellt werden. Wenn Ihr die user das erste mal mit der app dann Sie müssen sich anmelden, das "Sign Up" - button ist in der LoginViewController
. Die "Sign Up" - Taste wird der SignUpViewController
.
Sobald der Nutzer mit der Anmeldung fertig. Die MainViewController
vorgestellt werden.
Was ich versuche zu tun ist. In der MainViewController
gibt es eine Schaltfläche "Abmelden". Wenn der Benutzer drücken Sie die MainViewController
entlassen werden sollten, und LoginViewController
es sein sollte. Sollte der Benutzer nicht sehen, die SignUpViewController
zum zweiten mal.
Hier ist was ich versucht habe:
1) Entlassen SignUpViewController
und Gegenwart MainViewController
in "sign up" - button:
- (void) signUpClicked
{
MainViewController *mainViewController = [viewController.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"];
[viewController presentViewController:mainViewController animated:YES completion:^{
[viewController dismissViewControllerAnimated:NO completion:^{
}];
}];
}
2) Wenn MainViewController
Lasten, entlassen SignUpViewController
- (void)viewDidLoad
{
[super viewDidLoad];
SignUpViewController *signUpViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SignUpViewController"];
[signUpViewController dismissViewControllerAnimated:NO completion:^{
}];
}
- Wenn der logout-button gedrückt wird - den LoginViewController. Sind Sie entlassen views, die nicht auf dem Bildschirm?
- Wenn ich das Tue, dann wird es 4 ViewControllers auf der jeweils anderen? Ich glaube nicht, dass wird die beste Lösung sein.
- warum nutzen Sie nicht UINavigationController? Ich denke, es wäre einfacher zu manipulieren, ein Stapel von view-Controller als Vorlage und entließ Sie in diesem Fall
- Ich möchte. Aber UINavigationController wird mein design nicht so schön. Ich möchte auch nicht, redesign der gesamten app.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekam es. Ich ging die SignUpViewController der MainViewController und schließen Sie die SignUpViewController in der MainViewController.
Für alle anderen, die hatte die gleiche Frage wie ich.
SignUpViewController.m
MainViewController.m
presentViewController bekommen können Sie eine lange Wege, aber vielleicht sollten Sie Rollen Sie Ihre eigenen Container View Controller. Sie sind ziemlich dang einfach! Die UIContainerViewControllerProtectedmethods Kategorie UIViewController skizziert, was Methoden, die Sie kann/soll.
Der Grundtenor ist ein container View Controller fügt hinzu, dass child-View-Controller, um sich selbst und Ihre Ansichten, wie Untersichten von seiner eigenen Ansicht. Die main-Methode, die die schwerarbeit ist:
Im Abschnitt Animationen, die Sie tun können, unabhängig von der Art der Bewegung Sie möchten. In Ihrem Fall, würden Sie wollen, um die LoginViewController Blick hinter die MainViewController s-Ansicht, und bewegen Sie den MainViewController Sicht offscreen. Erhalten Sie zur Versorgung Ihrer eigenen animation Optionen, also der Erscheinung bewegen wird, ähnlich wie dismissViewController jetzt aussieht.
Es ist ein bisschen mehr Aufwand zu bekommen, aber View-Controller-Containment gibt Ihnen eine Menge Flexibilität und macht.
Dies war nicht Teil Ihrer Frage, aber Sie sollten überlegen, eine
UINavigationController
denn es ist wahrscheinlich, dass Sie haben, um zu zeigen, neue Ansichten von Ihrem MainViewController.Die Architektur, die ich verwenden würde, ist die nächste:
So Ihre erste view-controller ist das LoginViewController.
In Ihrem SignupViewController, Sie implementiert die nächsten Protokoll:
Den
customData
Objekt ist nur dann nützlich, wenn Sie Daten von Ihrem SignupViewController zu Ihrem MainViewController.Und fügen Sie diese Eigenschaft, um Ihre SignupViewController
Ihre LoginViewController jetzt hat, um das Protokoll umzusetzen, die Sie gerade erstellt haben.
Und Sie sollten die Umsetzung dieser Methoden, wie diese
Ich erkläre ein wenig diesem code ^^
In Ihrem SignupViewController, wenn der Benutzer auf die Schaltfläche klickt, endet die Anmeldung, rufen Sie diese Methode
Oder wenn er bricht
Mit dieser Methode, Ihre SignupViewController entfernt werden, wenn Sie Ihre MainViewController. Und wenn der Benutzer Abmeldungen, müssen Sie diese Methode aufrufen, Ihre MainViewController :
Als Ihre SignupViewController schon entlassen ist, werden Sie umgeleitet yo Ihr LoginViewController direkt.
LÖSUNG: Ändern Sie die aktuelle navigation stack
Der sauberste Weg, um dieses problem zu lösen, ist durch den Zugriff auf die navigation-controller, Navigation-stack. Der navigation-controller kennt den Fluss durch die Speicherung der Controller in einem array, wo es stapelt sich auf einer auf dem Controller. Sie können ändern Sie diesen Stapel durch das entfernen der unerwünschten view-controller einmal sicher ist, diesen Stapel dargestellt wird auf dem Anwesen genannt
viewControllers
(NSArray). Der sichere Weg ist, um es zu entfernen aus dem array nach ist nicht die aktuelle view-controller (oder die oberste auf dem Stapel), die Sie überprüfen können, indem man die ImmobilievisibleViewController
Also das array sollte so Aussehen, wenn Sie bereits signedup und Sie sind auf der mainViewController:
[loginVC,SignUpVC,MainVC]
Das bedeutet, dass
MainVC
ist dievisibleViewController
und es ist sicher zu ändern, die navigation stack so lange, wie Sie halten die gleichevisibleViewController
als das Letzte Element auf das array.Da ist nicht ein Veränderliches Array weisen Sie einfach ein neues array an die
viewControllers
- Eigenschaft mit dieser[loginVC,MainVC]
. Ich empfehle mindestens unter einem peak in der Dokumentation auf UINavigationController.Dieser arbeitete für mich; es war sehr mühsam immer die Reihenfolge korrekt.