Bonjour et bienvenue dans ce cours sur la navigation et les formulaires en iOS ! Ensemble, nous allons découvrir comment créer plusieurs pages dans une application, et comment organiser la navigation et la communication entre elles. Vous apprendrez aussi à créer des formulaires en vous appuyant sur des composants comme les champs de texte, les boutons switch, les sélecteurs et d'autres encore. Nous verrons même comment gérer le clavier et présenter des alertes aux utilisateurs.
Et bien sûr, j'ai prévu quelques surprises et autres bonus en chemin !
Miawouf
Dans ce cours, nous allons développer une application de rencontre... pour chiens et chats ! Cette application est baptisée Miawouf. Et nous allons nous concentrer sur la phase d'inscription. Car elle nous suffit pour découvrir tout ce qui est prévu dans ce cours !
Miawouf est divisée en deux, une inscription pour les chiens et une pour les chats. Et l'inscription se fait en trois pages :
une page d'accueil ;
un formulaire d'inscription ;
une page de confirmation.
Pour construire cette application avec moi, je vous ai préparé un petit dossier contenant les images dont vous allez avoir besoin pour le cours. Vous pouvez le télécharger ici.
Dans ce cours, il n'y a pas de projet Xcode à télécharger, donc je vous invite à créer un projet vide, en choisissant le template le plus simple : App.
Vous pouvez déjà glisser les images et icônes dans les assets du projet, et le fichier Races.swift dans votre navigateur de fichier.
Et voilà, vous êtes fin prêt à suivre ce cours.
Rappel sur le MVC
Avant de nous lancer tête baissée dans nos différents sujets, je voudrais prendre un petit moment pour parler évidemment de MVC !
Pour rappel, en MVC, le modèle et la vue n'ont pas connaissance de l'existence de l'autre, et le contrôleur est le seul à pouvoir s'adresser directement à l'un et l'autre.
Le modèle utilise différents modes de communication, tels que les notifications, des closures ou encore un pattern delegate pour s'adresser au contrôleur, et la vue utilise des actions. Ces deux modes de communication sont aveugles pour que la vue et le modèle puissent rester complètement indépendants du contrôleur.
Plusieurs MVC
En iOS, un MVC correspond généralement à une page de l'application, ou en tout cas à un espace défini de l'écran. Donc pour chaque nouvelle page, on va avoir un nouveau MVC.
Mais du coup, comment communique-t-on entre MVC ?
Quelle question parfaite ! Vous commencez à saisir l'importance de l'architecture, c'est beau...
Je vais résumer cela en trois règles simples :
1/ Une vue communique toujours avec un seul contrôleur.
2/ Un modèle peut être utilisé par plusieurs contrôleurs.
Par exemple, une classe du modèle peut gérer les utilisateurs, et les informations concernant l'utilisateur ont des chances d'être utiles dans plusieurs pages. Donc, ce modèle peut être partagé par plusieurs contrôleurs.
3/ Les MVC communiquent entre eux via le contrôleur.
Deux vues ne peuvent pas communiquer entre elles. De toute façon, il faut bien comprendre qu'une vue appartient à un contrôleur, et n’a de moyen de communication qu’avec ce dernier. Elle ne pourra donc jamais discuter avec une autre vue .
Pour vous souvenir de ces trois règles simples, il suffit de se souvenir de la logique du MVC :
Le modèle détient la logique, mais aussi les données de l'application. Donc ces informations doivent pouvoir être accessibles depuis plusieurs contrôleurs.
Le contrôleur a pour rôle principal la communication entre le modèle et la vue , il est donc logique qu'il soit aussi le centre de communication vers les autres MVC.
La vue a pour seul rôle d'afficher ce qu'on lui demande, elle ne réfléchit pas, et du coup n'est capable que de prendre les commandes d'un seul contrôleur. Il ne faut pas lui en demander plus !
Je pense que ça fait suffisamment de théorie pour le moment. Et si tout ça n'est pas parfaitement acquis, c'est normal. Tout va s'éclaircir lorsque vous verrez ce que ça donne concrètement dans le code. Et ce dès le prochain chapitre, où nous allons ajouter une barre de navigation dans notre application !