unwind segue by benoit capallere
TRANSCRIPT
UnWind Segue
Benoit Capallere - Edecision
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.
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 »
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.
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
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);}
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"]) { }}
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;}
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
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 ».
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.