En un mot
Une séquence de déroulement (parfois appelée sortie de séquence ) peut être utilisé pour revenir naviguer par poussée, des enchaînements modales ou popover (comme si vous sauté l'élément de navigation dans la barre de navigation, fermé le popover ou de rejeter le contrôleur de vue présenté modalement). En plus de cela, vous pouvez réellement vous détendre non seulement dans une, mais dans une série de séquences push / modal / popover, par exemple "revenir en arrière" plusieurs étapes dans votre hiérarchie de navigation avec une seule action de déroulement.
Lorsque vous effectuez une séquence de déroulement, vous devez spécifier une action, qui est une méthode d'action du contrôleur de vue vers lequel vous souhaitez vous détendre.
Objectif c:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Rapide:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Le nom de cette méthode d'action est utilisé lorsque vous créez la séquence de déroulement dans le storyboard. De plus, cette méthode est appelée juste avant la séquence de déroulement. Vous pouvez obtenir le contrôleur de vue source à partir du UIStoryboardSegue
paramètre passé pour interagir avec le contrôleur de vue qui a initié la transition (par exemple pour obtenir les valeurs de propriété d'un contrôleur de vue modal). À cet égard, la méthode a une fonction similaire à la prepareForSegue:
méthode deUIViewController
.
Mise à jour iOS 8: les séquences de déroulement fonctionnent également avec les séquences adaptatives d'iOS 8, telles que Afficher et Afficher les détails .
Un exemple
Ayons un storyboard avec un contrôleur de navigation et trois contrôleurs de vue enfant:
De Green View Controller, vous pouvez vous détendre (revenir en arrière) à Red View Controller. Du bleu, vous pouvez vous détendre au vert ou au rouge via le vert. Pour activer le déroulement, vous devez ajouter les méthodes d'action spéciales au rouge et au vert, par exemple voici la méthode d'action en rouge:
Objectif c:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Rapide:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Une fois la méthode d'action ajoutée, vous pouvez définir la séquence de déroulement dans le storyboard en faisant glisser la souris sur l'icône Quitter. Ici, nous voulons nous détendre du rouge au vert lorsque le bouton est enfoncé:
Vous devez sélectionner l'action définie dans le contrôleur de vue vers lequel vous souhaitez vous détendre:
Vous pouvez également vous détendre en passant du rouge au bleu (qui est "à deux pas" de la pile de navigation). La clé consiste à sélectionner l'action de déroulement correcte.
Avant d'effectuer la séquence de déroulement, la méthode d'action est appelée. Dans l'exemple, j'ai défini une séquence de déroulement vers le rouge à partir du vert et du bleu. Nous pouvons accéder à la source du déroulement dans la méthode d'action via le paramètre UIStoryboardSegue:
Objectif 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!");
}
}
Rapide:
@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")
}
}
Le déroulement fonctionne également grâce à une combinaison de séquences push / modales. Par exemple, si j'ajoutais un autre contrôleur de vue jaune avec une séquence modale, nous pourrions passer du jaune au rouge en une seule étape:
Se détendre du code
Lorsque vous définissez une séquence de déroulement en faisant glisser quelque chose vers le symbole Quitter d'un contrôleur de vue, une nouvelle séquence apparaît dans l'aperçu du document:
La sélection de la séquence et l'accès à l'inspecteur d'attributs révèlent la propriété "Identifier". Utilisez ceci pour donner un identifiant unique à votre enchaînement:
Après cela, la séquence de déroulement peut être effectuée à partir du code comme n'importe quelle autre séquence:
Objectif c:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Rapide:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
oupopViewControllerAnimated:
réaliser la même chose?