In einer Nussschale
Ein Abwicklungs-Segue (manchmal auch als Exit-Segue bezeichnet ) kann verwendet werden, um durch Push-, Modal- oder Popover-Segues zurück zu navigieren (als hätten Sie das Navigationselement aus der Navigationsleiste entfernt, das Popover geschlossen oder den modal dargestellten Ansichts-Controller geschlossen). Darüber hinaus können Sie nicht nur eine, sondern eine Reihe von Push- / Modal- / Popover-Abschnitten abwickeln, z. B. mehrere Schritte in Ihrer Navigationshierarchie mit einer einzigen Abwicklungsaktion "zurückgehen".
Wenn Sie einen Abwicklungsabschnitt ausführen, müssen Sie eine Aktion angeben, bei der es sich um eine Aktionsmethode des Ansichtscontrollers handelt, zu dem Sie sich abwickeln möchten.
Ziel c:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Schnell:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Der Name dieser Aktionsmethode wird verwendet, wenn Sie den Abwicklungsbereich im Storyboard erstellen. Darüber hinaus wird diese Methode unmittelbar vor dem Abwickeln aufgerufen. Sie können den Quellansichts-Controller über den übergebenen UIStoryboardSegue
Parameter dazu bringen, mit dem Ansichts-Controller zu interagieren, der den Übergang initiiert hat (z. B. um die Eigenschaftswerte eines modalen Ansichts-Controllers abzurufen). In dieser Hinsicht hat das Verfahren eine ähnliche Funktion wie das prepareForSegue:
Verfahren von UIViewController
.
iOS 8-Update: Abwicklungssegues funktionieren auch mit den adaptiven Segues von iOS 8 wie Show und Show Detail .
Ein Beispiel
Lassen Sie uns ein Storyboard mit einem Navigationscontroller und drei untergeordneten Ansichtscontrollern erstellen:
Vom Green View Controller können Sie sich entspannen (zurück navigieren) zum Red View Controller. Von Blau können Sie sich über Grün nach Grün oder Rot entspannen. Um das Abwickeln zu aktivieren, müssen Sie Rot und Grün die speziellen Aktionsmethoden hinzufügen. Beispiel: Hier ist die Aktionsmethode in Rot:
Ziel c:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Schnell:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Nachdem die Aktionsmethode hinzugefügt wurde, können Sie den Abwicklungsbereich im Storyboard definieren, indem Sie bei gedrückter Ctrl-Taste auf das Symbol Beenden ziehen. Hier wollen wir uns von Grün zu Rot entspannen, wenn die Taste gedrückt wird:
Sie müssen die Aktion auswählen, die im Ansichts-Controller definiert ist, zu dem Sie sich abwickeln möchten:
Sie können sich auch von Blau zu Rot entspannen (das ist "zwei Schritte entfernt" im Navigationsstapel). Die Taste wählt die richtige Abwickelaktion aus.
Bevor der Abwicklungsabschnitt ausgeführt wird, wird die Aktionsmethode aufgerufen. Im Beispiel habe ich einen Abwicklungsbereich von Grün und Blau zu Rot definiert. Über den Parameter UIStoryboardSegue können wir in der Aktionsmethode auf die Quelle des Abwickelns zugreifen:
Ziel 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 Abwickeln funktioniert auch durch eine Kombination von Push- / Modal-Segues. Wenn ich beispielsweise einen weiteren Controller für die gelbe Ansicht mit einem modalen Übergang hinzufügen würde, könnten wir uns in einem einzigen Schritt von Gelb bis zurück zu Rot entspannen:
Abwickeln vom Code
Wenn Sie einen Abwicklungsabschnitt definieren, indem Sie bei gedrückter Ctrl-Taste etwas auf das Exit-Symbol eines Ansichts-Controllers ziehen, wird in der Dokumentübersicht ein neuer Abschnitt angezeigt:
Wenn Sie den Abschnitt auswählen und zum Attributinspektor wechseln, wird die Eigenschaft "Bezeichner" angezeigt. Verwenden Sie diese Option, um Ihrem Segue eine eindeutige Kennung zu geben:
Danach kann der Abwicklungs-Segue wie jeder andere Segue aus dem Code ausgeführt werden:
Ziel c:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Schnell:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
oderpopViewControllerAnimated:
erreichen?