2. Les grandes lignes
• Utilisation avec les storyboards
• Disponible depuis iOS 6
• Va servir à faire des traitements sur le retour
sur un précèdent contrôleur avec moins de
code que pour un delegate.
3. Mise en place (1)
• On a 2 contrôleurs avec :
– un bouton pour passer du « rouge » au vert »
– Un bouton pour passer du « vert » au « rouge »
4. Mise en place (2)
• On rajoute la méthode suivante sur le contrôleur 1 « rouge »
- (IBAction)backUnWindSegue:(UIStoryboardSegue *)segue
{
}
• On Clic sur le bouton du contrôleur 2 « vert » pour lui associer
cette méthode avec le bouton « Exit » du storyboard.
5. L’impact dans le storyboard
• Dans « connexion inspector » on va retrouver
la connexion vers l’action
• Dans l’éditeur de scène on va retrouver notre
Unwind Segue
6. Récupérer des données
• On attribue un identifiant à l’unwind segue
• On rajoute une @property au controleur 2 « vert »
• On peut ainsi récupérer la valeur depuis le controleur 1 « rouge »
- (IBAction)backUnWindSegue:(UIStoryboardSegue *)segue
{
View2Controller *controller = segue.sourceViewController;
NSLog(@"%d",controller.value);
}
7. Traitement avec l’Unwind segue
• Comme pour une segue on pourra faire un
traitement particulier lors du déclenchement avec
« prepareForSegue »
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"BackUnwind"]) {
}
}
8. Condition sur l’unwind segue
• On pourra conditionner son exécution avec la méthode
« shouldPerformSegueWithIdentifier » sur le contrôleur 2 « vert ».
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
return NO;
}
• Si on a plusieurs segues il suffira de rajouter le test sur le nom de l’identifieur
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if ([identifier isEqualToString:@"BackUnWind"])
{
return YES;
}
return NO;
}
9. Unwind à plusieurs niveaux (1)
• Il va être possible de dépiler plusieurs contrôleurs d’un coup
• 0n rajoute un contrôleur « bleu » à notre exemple
10. Unwind à plusieurs niveaux (2)
• Sur le contrôleur « bleu » si on cherche à l’associer au bouton
« Exit » on retrouvera la méthode « backUnWindSegue » qui
est dans le contrôleur 1 « rouge », n’étant pas implémenté
dans le contrôleur 2 « vert ».
• On va donc directement retourner sur le contrôleur 1
« rouge ».
11. Comme pour une segue
• On peut
– Déclencher la segue dans le code avec l’identifier
[self performSegueWithIdentifier:@"BackManualUnWind" sender:self];
– Faire une « Custom » segue pour mettre en place sa
propre animation.