Wikipedia: segue
À la fin de ce module, nous devrions être en mesure, grâce au ‘Storyboard’ de Xcode, de naviguer entre les différentes scènes d’un projet. De plus, nous saurons comment renseigner des transitions « segue » différentes.
Action 1.1 – Télécharger les apps du projet à partir de github
Note: Attention, ce projet contient plusieurs apps, il faut ouvrir le bon groupe. Même chose lors d’un test sur l’émulateur, il faut s’assurer d’avoir sélectionné la bonne app.
Astuce – Lors des tests, si le module n’apparait pas dans la liste des schémas, sélectionner ‘Manage Schemes…’ – liste à droite du bouton ‘stop’ – suivi par ‘Autocreate Schemes now…’
Action 1.2 – Afficher le ‘storyboard’ de l’app ‘départs.module 01‘ et y ajouter deux (2) ‘ViewController’.
Action 1.3 – Renseigner la couleur de fond des trois scènes: bleu, rouge et vert.
NOTE: Il faut désactiver la mise en page automatique:
Action 1.4 – Renommer les objets ‘scènes’ pour ‘Scène bleue’, …
Action 1.5 – Encapsuler ‘Scène bleue’ dans un ‘Navigation controller’
Action 1.6 – Observer le lien entre ‘Navigation Controller’ et ‘Scène bleue’ ainsi que la nouvelle zone au haut de ‘Scène bleue’.
Action 1.7 – Ajouter un UIButton dans la zone de navigation et renseigner ses propriétés.
Attention – Selon la version de Xcode, il est possible que la zone de navigation soit vide. Il faudra alors ajouter un élément de type ‘navigation item’ à droite de la barre de navigation.
Action 1.8 – Définir un ‘segue’ de type ‘push’ entre le bouton et ‘Scène rouge’.
Note: Attention, il faut cliquer 2 fois sur la zone du bouton pour le sélectionner. Vérifier son type dans I4.
Action 1.9 – Renseigner les propriétés du ‘segue’ .
Note: le lien entre ‘Scène bleue’ et ‘Scène rouge’ doit-être sélectionné.
Action 1.11 – Renseigner le titre de la zone de navigation de ‘Scène bleue’
Action 1.12 – Tester l’application
Action 1.13 – En laboratoire, programmer le segue entre ‘Scène rouge’ et ‘Scène verte’ puis, tester l’application.
Astuce: Il est possible de glisser un « Navigation Controller » de la librairie vers le ‘Storyboard’.
Voici comment faire pour retourner à la scène précédente par programmation:
// Retour au début _ = self.navigationController?.popToRootViewController(animated: true) // Retour à la scène précédente _ = self.navigationController?.popViewController(animated: true)
Action 2.1 – Ouvrir le projet ‘Départs.module 02’
Action 2.2 – Encapsulons la scène bleue dans un ‘Tab Bar Controller’: Menu-Editor-Embed In-Tab Bar Controller.
Action 2.3 – Observons le nouveau contrôleur obtenu.
Action 2.4 – Définissons une relation ‘segue’ entre le ‘Tab Bar controller’ et la scène rouge. Ctrl+Glisser du centre du TBC vers la scène à lier.
Action 2.5 – Renseignons le type ‘segue’ à « view controllers ».
Résultat:
NOTE: Il est possible (sous Xcode 8) que l’affichage soit brisé. Renseigner une image sur l’item du ‘tab bar’ devrait corriger le problème.
Action 2.6 – Répétons l’action 2.5 pour la scène verte.
Action 2.7 –
Action 2.8 –
Action 2.9 – Renseigner le titre de l’item
Action 2.9b – Utiliser des icônes systèmes sur le bouton menu (‘Tab Bar Item’ pour pour la scène et ‘Bar Item’ pour le ctrl)
Action 2.10 – Tester l’app
Action 2.11 – Parcourir les options.
Action 2.12 – Personnaliser l’icône du bouton menu avec des images livrées avec l’app.
Action 2.13 – Tester l’application
Note: Il est possible de modifier l’ordre des items en les glissant dans la zone menu du TabBarController.
Astuce: Il est possible de glisser un « TabBar Controller » de la librairie vers le ‘Storyboard’.
Action 3.1 – Ouvrir le storyboard du module 03
Action 3.2 – Observons la structure du ‘Storyboard’
Action 3.3 – Encapsulons les rangés ‘XBox’ et ‘PS4’ dans un ‘Navigation Controller’
Action 3.4 – A) Ajoutons des ‘UIButton’ dans les sections de navigation et B) Définissons des liens ‘segue’ à partir des boutons.
Action 3.4.2 – À faire par l’étudiant
Action 3.5 – Ajoutons un ‘Tab Bar Controller’
Action 3.6 – Lier le deuxième ‘Navigation Controller’
Action 3.7 – Renseigner le ‘segue’
Action 3.8 – Nommer les items du menu ‘Tab Bar’
Action 3.9 – Testons l’application.
Action 4 – Ouvrir le storyboard du module 04
Action 4.1 – Observons la structure du ‘Storyboard’
Note: Les images, de la scène de la rangé 2, sont des boutons.
Action 4.2 – Tester la relation en une scène et son contrôleur – Associer plusieurs scènes à un contrôleur.
Action 4.2.2 – Créer une classe ‘UIViewController’ pour la scène du menu – print(« je suis le ctrl de la vue menu »)
Action 4.3 – Définir les liens ‘segues’ entre les boutons du menu et les scènes.
Action 4.4 – Renseigner l’action segue de type ‘modal‘ – Attention, ne pas se fier à l’image suivante!
Action 4.5 – Nommer le lien (facultatif sauf pour segue ‘custom’)
Si:
Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Could not perform segue with identifier ‘(null)’. A segue must either have a performHandler or it must override -perform.’
Alors le segue n’est pas de type « modal’
Action 4.6 – Tester l’application – premier bouton menu
Action 4.7 – Tester le bouton « Retour au menu »
Action 4.8 – Créer une nouvelle classe (à partir de UIViewController) pour les scènes ‘plante2″
Action 4.9 – Nommer la classe « Plante2 » – Attention, ne pas utiliser le nom proposé par la capture suivante:
Action 4.10 – Lier la classe ‘Pante’ à la scène plante01
Action 4.11 – Créer un lien ‘action’ sur le bouton de la scène ‘plante01’
Action 4.12 – Renseigner le type de la connexion et le nom.
Action 4.13 – Ajouter le code suivant
// Retour à la fenêtre précédente dismiss(animated: true, completion: nil)
Action 4.14 – Tester l’application
Action 4.15 – Renseigner la classe des scènes ‘plante02..04’ avec la classe ‘Plante’ puis lier la méthode ‘retourAuMenu’ au trois boutons restants.
Action 4.16 – Tester les transitions possibles
Action 4.26 – Ajouter la scène d’introduction suivante suivant:
Note: Xcode va créer, pour un nouveau projet, un ‘LunchScreen’, par contre, à moins de figer l’app, il n’est pas possible de contrôler la duré de son affichage.
Action 4.27 – Créer un classe pour la scène d’intro et les associer
Action 4.28 – Renseigner le segue de type ‘Show‘
Action 4.29 – Nommer le segue (Attention, à partir de Xcode 8 il faut choisir ‘show’ comme segue).
Action 4.30 – Ajouter le code suivant à la classe ‘Intro’
override func viewDidLoad() { super.viewDidLoad() DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { self.passerAuMenuPrincipal() } /* Ou bien: Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(Intro.passerAuMenuPrincipal), userInfo: nil, repeats: false) */ } // viewDidLoad() func passerAuMenuPrincipal(){ performSegue(withIdentifier: "versMenuPrincipal", sender: self) } // passerAuMenuPrincipal
Action 4.31 – Renseigner la scène d’intro comme étant la vue principale
Action 4.32 – Tester les transitions
Action 4.33 – Terminer le design et tester l’application.
Note: Police = Snell Roundhand
Explications en classe