In breve
Segue uno svolgersi (a volte chiamato exit segue ) può essere utilizzato per tornare indietro attraverso follow, push modali o popover (come se si estraesse l'elemento di navigazione dalla barra di navigazione, si chiudesse il popover o si eliminasse il controller di visualizzazione presentato in modo modale). Inoltre, puoi effettivamente rilassarti non solo attraverso una, ma una serie di follower push / modal / popover, ad esempio "tornare indietro" di più passaggi nella gerarchia di navigazione con una singola azione di svolgimento.
Quando si esegue un svolgimento segue, è necessario specificare un'azione, che è un metodo di azione del controller di visualizzazione che si desidera svolgere.
Objective-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Swift:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Il nome di questo metodo di azione viene utilizzato quando si crea lo svolgimento segue nello storyboard. Inoltre, questo metodo viene chiamato poco prima che venga eseguito lo svolgimento. È possibile ottenere il controller della vista di origine dal UIStoryboardSegue
parametro passato per interagire con il controller di vista che ha avviato il seguito (ad es. Per ottenere i valori delle proprietà di un controller di vista modale). A questo proposito, il metodo ha una funzione simile al prepareForSegue:
metodo di UIViewController
.
Aggiornamento iOS 8: i segui Unwind funzionano anche con i segui adattivi di iOS 8, come Mostra e Mostra dettagli .
Un esempio
Facciamo uno storyboard con un controller di navigazione e tre controller di visualizzazione figlio:
Da Green View Controller puoi rilassarti (tornare indietro) a Red View Controller. Dal blu puoi rilassarti al verde o al rosso tramite il verde. Per abilitare lo svolgimento è necessario aggiungere i metodi di azione speciali a Rosso e Verde, ad esempio qui è il metodo di azione in Rosso:
Objective-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Swift:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Dopo aver aggiunto il metodo di azione, è possibile definire i seguenti svolgimenti nello storyboard trascinando il controllo sull'icona Esci. Qui vogliamo rilassarci al rosso dal verde quando si preme il pulsante:
È necessario selezionare l'azione definita nel controller di visualizzazione che si desidera svolgere:
Puoi anche rilassarti in Rosso da Blu (che è "a due passi" nello stack di navigazione). La chiave sta selezionando l'azione di svolgimento corretta.
Prima di eseguire lo svolgersi, viene chiamato il metodo di azione. Nell'esempio che ho definito, uno svolgersi segue il rosso sia dal verde che dal blu. Possiamo accedere alla fonte del svolgersi nel metodo di azione tramite il parametro UIStoryboardSegue:
Objective-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!");
}
}
Swift:
@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")
}
}
Unwinding funziona anche attraverso una combinazione di follow / push modali. Ad esempio, se ho aggiunto un altro controller di visualizzazione Yellow con un seguito modale, potremmo tornare da Yellow a Red in un unico passaggio:
Rilassarsi dal codice
Quando si definisce un seguito di svolgimento svolgendo il controllo e trascinando qualcosa sul simbolo Exit di un controller di visualizzazione, nel profilo documento viene visualizzato un nuovo seguito:
Selezionando il seguito e andando su Impostazioni Attributi si rivela la proprietà "Identificatore". Usa questo per dare un identificatore univoco al tuo seguito:
Dopodiché, lo svolgimento di svolgersi può essere eseguito dal codice proprio come qualsiasi altro segue:
Objective-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Swift:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
opopViewControllerAnimated:
ottenere la stessa cosa?