Kurz und bündig
Eine Rückspulübergang (manchmal auch als Exit Segue ) kann verwendet werden, um durch Push-, Modal- oder Popover-Segues zurück zu navigieren (als ob Sie das Navigationselement aus der Navigationsleiste herausgezogen, das Popover geschlossen oder den modal präsentierten View-Controller beendet hätten). Darüber hinaus können Sie nicht nur einen, sondern eine Reihe von Push-/Modal-/Popover-Sequenzen abwickeln, z. B. mehrere Schritte in der Navigationshierarchie mit einer einzigen Abwicklungsaktion zurückgehen.
Wenn Sie eine Abwicklungssequenz durchführen, müssen Sie eine Aktion angeben, d. h. eine Aktionsmethode des View-Controllers, zu dem Sie abwickeln möchten.
Objektiv-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Schnell:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Der Name dieser Aktionsmethode wird verwendet, wenn Sie die Abspulsequenz im Storyboard erstellen. Außerdem wird diese Methode aufgerufen, kurz bevor die Abspulsequenz ausgeführt wird. Sie können den Quell-View-Controller aus dem übergebenen UIStoryboardSegue
Parameter, um mit dem View-Controller zu interagieren, der den Segue initiiert hat (z.B. um die Eigenschaftswerte eines modalen View-Controllers zu erhalten). In dieser Hinsicht hat die Methode eine ähnliche Funktion wie die Methode prepareForSegue:
Methode der UIViewController
.
iOS 8 Update: Die Abspulsequenzen funktionieren auch mit den adaptiven Segues von iOS 8, wie z. B. anzeigen y Detail anzeigen .
Ein Beispiel
Wir haben ein Storyboard mit einem Navigationscontroller und drei untergeordneten Viewcontrollern:
Von der grünen Ansichtssteuerung können Sie zur roten Ansichtssteuerung zurückgehen (navigieren). Von Blau können Sie zu Grün oder zu Rot über Grün zurückspulen. Um das Abwickeln zu ermöglichen, müssen Sie die speziellen Aktionsmethoden zu Red und Green hinzufügen, z. B. hier die Aktionsmethode in Red:
Objektiv-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Schnell:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Nachdem die Aktionsmethode hinzugefügt wurde, können Sie die Abspulsequenz im Storyboard definieren, indem Sie mit gedrückter Maustaste auf das Symbol Beenden ziehen. Hier wollen wir von Grün zu Rot abwickeln, wenn die Schaltfläche gedrückt wird:
Sie müssen die Aktion auswählen, die in dem View-Controller definiert ist, zu dem Sie abwickeln möchten:
Sie können auch von Blau zu Rot zurückspulen (was im Navigationsstapel "zwei Schritte entfernt" ist). Der Schlüssel liegt in der Auswahl der richtigen Abwicklungsaktion.
Bevor die Abspulsequenz ausgeführt wird, wird die Aktionsmethode aufgerufen. Im Beispiel habe ich eine Abwicklungssequenz zu Rot aus Grün und Blau definiert. Wir können in der Action-Methode über den Parameter UIStoryboardSegue auf die Quelle der Abspulung zugreifen:
Objektiv-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Schnell:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Das Abspulen funktioniert auch durch eine Kombination aus Push- und Modal-Segmenten. Wenn ich z. B. einen weiteren gelben View-Controller mit einem modalen Segue hinzufüge, könnten wir in einem einzigen Schritt von Gelb zurück nach Rot abwickeln:
Abspulen von Code
Wenn Sie eine Abwicklungssequenz definieren, indem Sie etwas per Control-Dragging auf das Exit-Symbol eines View-Controllers ziehen, erscheint eine neue Segue in der Dokument-Gliederung:
Wenn Sie die Segue auswählen und in den Attributinspektor gehen, sehen Sie die Eigenschaft "Identifier". Verwenden Sie diese, um Ihrem Segue einen eindeutigen Bezeichner zu geben:
Danach kann die Abspulsequenz wie jede andere Sequenz im Code ausgeführt werden:
Objektiv-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Schnell:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)