Libérez votre développeur d'application interne Partie 21 : Passage de données entre contrôleurs

Vous avez une idée d'application mais vous n'avez pas les connaissances en programmation nécessaires pour commencer à la construire ? Dans cette série de blogs hebdomadaires, je vous emmènerai, en tant que non-programmeur, pas à pas dans le processus de création d'applications pour l'iPhone, l'iPod touch et l'iPad. Rejoignez-moi chaque semaine dans cette aventure, et vous verrez à quel point il est amusant de transformer vos idées en réalité ! Voici la partie 21 de la série. Si vous venez juste de commencer, regardez le début de la série ici (Ce post a été mis à jour vers Swift 1.2, Xcode 6.4, et iOS 8) .

Maintenant que vous avez une connaissance de base de l'affichage de listes de données, il est temps de parler de la transmission d'informations entre les contrôleurs de vue. C'est un sujet extrêmement important, car vous devrez le faire plusieurs fois dans vos applications iOS. Dans ce billet, je vais vous présenter les principales étapes et vous apprendre les meilleures pratiques. Afin de suivre l'évolution du projet iAppsReview , vous pouvez obtenir la version la plus récente du projet iAppsReview avec lequel nous allons travailler dans ce post à partir de ce lien . Pour une meilleure expérience d'apprentissage, je vous encourage à suivre les étapes par vous-même. Si vous rencontrez des difficultés, vous pouvez obtenir le projet terminé à partir de ce lien .

Maîtrisez votre iPhone en une minute par jour :

Inscrivez-vous à la newsletter "Tip of the Day" de iphonologie et nous vous enverrons chaque jour un conseil pour gagner du temps et tirer le meilleur parti de votre iPhone ou iPad.

Pourquoi avez-vous besoin de transmettre des informations d'un contrôleur de vue à un autre ? La figure 1 en fournit un excellent exemple.

Figure 1 - Vous devez passer la catégorie d'application actuellement sélectionnée entre les contrôleurs de vue.

Au moment de l'exécution, lorsqu'un utilisateur tape sur la ligne App Category de la vue du tableau à gauche, le contrôleur de vue Write Review doit passer la catégorie actuellement sélectionnée au contrôleur de vue App Category . Le contrôleur de vue App Category doit connaître cette information pour pouvoir afficher une coche dans la ligne de la catégorie actuellement sélectionnée. Inversement, lorsque l'utilisateur sélectionne une catégorie dans la scène App Category au moment de l'exécution, le contrôleur de vue App Category doit renvoyer la catégorie nouvellement sélectionnée au contrôleur de vue Write Review afin que la catégorie actuellement sélectionnée puisse être affichée dans sa vue tableau.

Dans le contexte de cette discussion, le contrôleur de vue source est le contrôleur à partir duquel les données sont transmises et le contrôleur de vue destination est le contrôleur qui reçoit les données.

Transmission de données à un contrôleur de visualisation

Parlons d'abord de la transmission de données à un contrôleur de vue.Cela nécessite généralement trois étapes :

  1. Créez une propriété sur le contrôleur de vue de destination pour conserver les données transmises par le contrôleur de vue source.
  2. Configurez la transition entre les contrôleurs de vue source et destination.
  3. Dans le contrôleur de vue source, implémentez le prepareForSegue : et ajoutez le code qui stocke les données à transmettre à la propriété du contrôleur de vue de destination.

Dans cet exemple, il est logique de passer un ID de catégorie d'application entre la scène Write Review et la scène App Category .

Étape 1 : Créer un bien sur le contrôleur de vue de destination

Notre premier pas est facile.Nous devons ajouter une propriété appCategoryID au contrôleur de vue de destination pour que le contrôleur de vue source ait un endroit où stocker l'ID de la catégorie actuellement sélectionnée.

  1. Allez dans le navigateur de projet et sélectionnez le fichier AppCategoryViewController.swift file.
  2. Ajoutez la déclaration de propriété indiquée dans Figure 2 .

Figure 2 - Ajouter une propriété appCategoryID au fichier AppCategoryViewController.swift .

Étape 2 : Configurer la transition entre les contrôleurs de la source et de la destination

Cette deuxième étape est également facile. Il vous suffit de spécifier un identifiant pour la transition entre les contrôleurs de vue source et destination.

  1. Dans le navigateur de projet, sélectionnez le fichier Main.storyboard file.
  2. Cliquez sur la transition entre les scènes Write Review et App Category pour la sélectionner.
  3. Allez dans l'inspecteur d'attributs (le troisième bouton en partant de la droite dans la barre d'outils de l'inspecteur) et définissez l'attribut Identifier de la suite à AppCategorySegue . Cela fournit un identifiant pour la suite que nous pouvons utiliser dans notre fichier de code de contrôleur de vue source. Faites très attention à l'orthographe et aux majuscules et minuscules car vous devez utiliser exactement le même nom lorsque vous le référencez à partir du fichier de code.

Figure 3 - Définir l'identificateur de la suite à AppCategorySegue .

Améliorer la scène de l'évaluation écrite

Avant d'effectuer la troisième étape de la mise en œuvre du , préparez-vous à la ségrégation : dans le contrôleur de vue source, il y a un peu de ménage à faire dans le contrôleur de vue de la scène Write Review .

Commençons par ajouter une nouvelle variable d'instance à la scène pour contenir une référence à l'ID de la catégorie d'application actuellement sélectionnée.

  1. Dans le navigateur de projet, sélectionnez le fichier WriteReviewViewController.swift file.
  2. Ajoutez la propriété indiquée dans Figure 4 . Cela nous permet de stocker l'ID de la catégorie d'application actuelle.

    Figure 4 - Ajout d'un nouveau bien.

  3. Dans le fichier WriteReviewViewController.swift , faites défiler jusqu'à la méthode isReadyToShare .Comme nous ne voulons pas que l'utilisateur puisse enregistrer une critique à moins qu'une catégorie d'application n'ait été sélectionnée, nous devons ajouter du code à la méthode isReadyToShare du contrôleur de vue . Vous vous souvenez peut-être que nous avons créé cette méthode dans un article précédent.Les boutons Share et Post sont activés ou désactivés selon que cette méthode renvoie true ou false .
  4. Si l'utilisateur n'a pas sélectionné une catégorie d'application, la valeur de cette variable sera zéro. Ajoutez donc la vérification d'un zéro appCategoryID tas comme indiqué dans Figure 5 .

    Figure 5 - Vérifiez si l'utilisateur a sélectionné une catégorie d'application.

  5. Donnons maintenant à l'utilisateur un indice visuel qui lui indiquera qu'il doit sélectionner une catégorie d'application. Dans le navigateur de projet, sélectionnez le fichier Main.storyboard . Dans la scène Write Review , double-cliquez sur le côté droit de la ligne de vue du tableau App Category pour mettre l'étiquette détaillée en mode édition. Saisissez ensuite le texte Select comme indiqué dans la figure 6 et appuyez sur return .

Figure 6 - Réglez le texte de l'étiquette détaillée sur Sélectionnez .

Étape 3 : Mettre en œuvre le programme "PrepareForSegue" : Méthode

Vous êtes maintenant prêt à mettre en œuvre le prepareForSegue : dans le contrôleur de vue source, qui dans ce cas est WriteReviewViewController .

Le se prépare pour la Ségue : est appelée automatiquement sur votre contrôleur de vue source chaque fois qu'une suite est déclenchée. Elle vous permet d'effectuer des actions personnalisées avant que la transition vers le contrôleur de destination ne soit exécutée. Dans ce cas, la transition est déclenchée lorsque l'utilisateur tape sur la ligne App Category de la vue du tableau dans la scène Write Review .

  1. Dans le navigateur de projet, sélectionnez le fichier WriteReviewViewController.swift file.
  2. Ajoutez la méthode indiquée dans la figure 7 directement en dessous de la méthode viewDidLoad .

Figure 7 - Le se prépare pour la Ségue : code de la méthode

Comme vous pouvez le voir, le prepareForSegue : reçoit une référence à la suite qui a été déclenchée.Le code de cette méthode exécute les étapes suivantes, qui sont très typiques pour les méthodes de ce type :

  • La première ligne de code vérifie la propriété de l'identifiant de la séquence pour s'assurer que la séquence qui nous intéresse est bien celle qui a été déclenchée (vous pouvez avoir plusieurs séquences pour un contrôleur de vue).
  • La deuxième ligne de code fait référence au contrôleur de destination à partir de la propriété destinationViewController de la suite .
  • La troisième ligne de code stocke l'ID de la catégorie d'application actuelle sur la propriété appCategoryID du contrôleur de visualisation de destination .

Après l'exécution de cette méthode, la transition vers le contrôleur de destination est automatiquement exécutée.

Améliorer le contrôleur d'affichage des catégories d'applications

Maintenant que le contrôleur de vue Write Review passe l'ID de la catégorie d'application actuellement sélectionnée au contrôleur de vue App Category , ajoutons un code au contrôleur de vue App Category qui place une coche à côté de la catégorie actuellement sélectionnée dans la vue du tableau.

  1. Dans le navigateur de projet, sélectionnez le fichier AppCategoryViewController.swift file.
  2. Ajoutez la propriété oldIndexPath indiquée dans Figure 8 . Cette propriété nous permet de garder la trace du dernier élément sélectionné (vous verrez pourquoi nous en avons besoin dans un instant).

    Figure 8 - Créer une variable d'instance oldIndexPath .

  3. Ajoutez maintenant le code indiqué dans Figure 9 à la table tableView:cellForRowAtIndexPath : .

Figure 9 - Code qui permet de cocher la catégorie d'application actuellement sélectionnée

Rappelez-vous que le tableView:cellForRowAtIndexPath : est appelée une fois pour chaque cellule dans une vue tableau. Le code que vous venez d'ajouter vérifie si l'ID de l'AppCategoryEntity associé à la cellule actuelle est le même que l'ID de la catégorie actuellement sélectionnée.Si c'est le cas, une coche est ajoutée à la cellule et le chemin d'index de la cellule est stocké dans l'ancienne variable d'instance oldIndexPath pour une utilisation ultérieure. Si ce n'est pas le cas, le accessoryType de la cellule est réglé sur "None". Vous avez besoin de cette déclaration else pour que la catégorie sélectionnée précédemment soit décochée.

Renvoi de données à partir d'un contrôleur de vues

Afin de compléter la fonctionnalité de sélection d'une catégorie d'application, nous devons maintenant faire passer la catégorie actuellement sélectionnée de la scène App Category à la scène Write Review , afin qu'elle puisse afficher la catégorie nouvellement sélectionnée dans l'étiquette détaillée de la vue du tableau App Category ( Figure 1 ).

La meilleure façon de transmettre ces informations est de créer une méthode sur le WriteReviewViewController qui peut être appelée par le AppCategoryViewController . Cependant, avant de créer cette méthode, nous devons être un peu plus prévoyants. Comme le montre la Figure 10 , il y a deux scènes différentes dans l'application qui font suite à la scène App Category - la scène Write Review et la scène Online Reviews .

Figure 10 - Les scènes Write Review et Online Reviews font suite à la scène App Category .

Cela signifie que nous devons trouver un moyen de renvoyer la catégorie actuellement sélectionnée qui fonctionne bien pour la scène Write Review et Online Reviews . C'est ici qu'un protocole Swift peut venir à la rescousse !

En dehors du domaine des logiciels, le mot protocole est défini comme suit :

Le code de comportement établi dans tout groupe, organisation ou situation.

Cette définition n'est pas loin de la réalité lorsqu'il s'agit de protocoles dans Swift. Les protocoles sont utilisés pour définir un ensemble de comportements standard. Dans notre situation, nous avons besoin que les contrôleurs de vue Write Review et Online Reviews possèdent une méthode de rappel standard qui peut être utilisée par le contrôleur de vue App Category pour renvoyer l'entité AppCategoryEntity actuellement sélectionnée. Pour ce faire, nous pouvons demander au contrôleur de vue App Category de déclarer un protocole qui peut être adopté par les contrôleurs de vue Write Review et Online Reviews .

La figure 11 donne un aperçu des cinq principales étapes que vous devez effectuer chaque fois que vous avez besoin de transmettre des informations d'un contrôleur de vue à un autre. Dans ce contexte, les contrôleurs de vue Write Review et Online Reviews sont appelés le contrôleur de vue presenting , et le contrôleur de vue App Category est appelé le contrôleur de vue presented .

Figure 11 - Création d'une méthode de rappel pour le transfert de données depuis un contrôleur de vue

Voici les détails de ces étapes :

  1. Déclarer un protocole dans le contrôleur de vue présenté qui spécifie une méthode qui peut être mise en œuvre par le contrôleur de vue présenté . Le contrôleur de vue présenté utilisera cette méthode au moment de l'exécution pour retransmettre les données au contrôleur de vue présenté .
  2. Déclarer une propriété délégué sur le contrôleur de vue présenté qui contiendra une référence au contrôleur de vue présenté . Le contrôleur de vue présenté utilisera cette référence au contrôleur de vue présenté lorsqu'il appellera la méthode de protocole sur ce contrôleur de vue.
  3. Ajouter un code au contrôleur de vue présenté qui appelle la méthode du protocole, en passant les données au contrôleur de vue présenté .
  4. Adopter le protocole du contrôleur de vue présentant et implémenter la méthode avec un code qui fait quelque chose avec les données qui lui sont renvoyées.
  5. Dans le présentant voir le contrôleur se préparer pour la ségrégation : , demandez au contrôleur de vue présentant de stocker une référence à lui-même dans la propriété présenté délégué du contrôleur de vue .

Vous êtes maintenant prêt à mettre en œuvre ces étapes pour rafraîchir la ligne de vue du tableau App Category dans la scène Write Review .

Étape 1 : Déclarer un protocole dans le contrôleur de vue présenté

  1. Dans le navigateur de projet, sélectionnez le fichier AppCategoryViewController.swift .
  1. Ajoutez la déclaration du protocole AppCategoryDelegate qui figure dans la figure 12 .

Figure 12 - La déclaration de protocole AppCategoryDelegate

Ce protocole déclare une seule méthode, updateAppCategory : qui accepte une référence à un objet AppCategoryEntity . C'est la méthode que les contrôleurs de vue Write Review et Online Reviews doivent mettre en œuvre pour que le contrôleur de vue App Category puisse renvoyer l'AppCategoryEntity actuellement sélectionnée.

Étape 2 : Déclarer un bien de délégué sur le contrôleur de vue présenté

Plus bas dans le fichier AppCategoryViewController.swift , déclarer la propriété delegate indiquée dans Figure 13.

Figure 13 - Ajout d'une propriété delegate au fichier AppCategoryViewController.swift .

Cette propriété sera utilisée pour contenir une référence au contrôleur de la vue de présentation.

Étape 3 : Appeler la méthode du protocole sur le délégué

Nous devons maintenant ajouter du code au contrôleur de vue App Category qui appelle la méthode de protocole sur le délégué (le contrôleur de vue de présentation) lorsque l'utilisateur sélectionne une nouvelle catégorie d'application.

  1. Dans le navigateur de projet, sélectionnez le fichier AppCategoryViewController.swift file.
  2. Faites défiler le fichier jusqu'en bas et supprimez tous les codes commentés.
  3. Ajoutez la tableView:didSelectRowAtIndexPath : méthode présentée dans Figure 14 avant l'accolade de fermeture de la classe.

Figure 14 - Ajout de code à la méthode tableView:didSelectRowAtIndexPath .

Voici la répartition de ce que fait le code dans cette méthode :

  • La première ligne de code désélectionne la ligne sélectionnée actuelle. Si vous ne le faites pas, la ligne reste surlignée en bleu après que l'utilisateur l'ait tapée.
  • La cellule qui a été vérifiée précédemment n'est pas vérifiée. La valeur de la variable oldIndexPath est utilisée pour déterminer la cellule sélectionnée précédemment.
  • Une coche est ajoutée à la cellule actuellement sélectionnée.
  • L'indexPath de la cellule actuellement sélectionnée est enregistré pour une utilisation ultérieure.
  • La updateAppCategory : est appelée sur l'objet delegate (le contrôleur de vue de présentation), en passant une référence à l'objet AppCategoryEntity associé à la cellule actuellement sélectionnée.

Étape 4 : Adopter le protocole dans le contrôleur de la vue de présentation

Maintenant que vous avez configuré le contrôleur de la vue présentée, il est temps d'implémenter le protocole dans le contrôleur de la vue présentée.

  1. Dans le navigateur de projet, sélectionnez le fichier WriteReviewViewController.swift file.
  2. Adoptez le protocole AppCategoryDelegate comme indiqué dans Figure 15 .Comme vous pouvez le voir, une seule classe peut adopter de nombreux protocoles différents.

    Figure 15 - Adoption du protocole AppCategoryDelegate
    Nous devons maintenant mettre en œuvre la updateAppCategory : qui est déclarée dans le protocole AppCategoryDelegate . Mais avant cela, nous avons besoin d'un moyen d'obtenir une référence à la cellule de vue du tableau App Category dans la scène Write Review . La meilleure façon de le faire est de créer une sortie pour la cellule.

  3. Pour ce faire, sélectionnez d'abord le fichier Main.storyboard dans le navigateur de projet, puis affichez l'éditeur adjoint en cliquant sur le bouton central du groupe de boutons de l'éditeur dans la barre d'outils en haut de la fenêtre Xcode.
  4. Cliquez sur la barre d'état en haut de la scène Write Review pour sélectionner le contrôleur de vue. Cela devrait automatiquement afficher le fichier WriteReviewViewController.swift dans l'éditeur adjoint. Si ce n'est pas le cas, cliquez sur le bouton Manual dans la barre de saut en haut de l'Assistant Editor et sélectionnez Automatic> WriteReviewViewController.swift dans le menu contextuel.
  5. Maintenez la touche Control enfoncée, cliquez sur la cellule App Category et faites glisser le pointeur de votre souris jusqu'à la fin de la liste des propriétés dans l'éditeur adjoint. Lorsque la fenêtre contextuelle Insérer une sortie ou une collection de sorties apparaît ( Figure 16 ), relâchez la touche Control et le bouton de la souris.

    Figure 16 - Créer une sortie pour la cellule de vue de table.

  6. Dans le popup Créer une connexion, définissez le Nom sur appCategoryCell , et cliquez ensuite sur le bouton Connecter . Cela ajoute une nouvelle propriété de sortie au fichier d'en-tête .

    Figure 17 - Nom de la sortie appCategoryCell .

  7. Vous pouvez maintenant fermer l'éditeur adjoint en cliquant sur le bouton à gauche dans le groupe de boutons de l'éditeur en haut de la fenêtre Xcode.
  8. Vous êtes maintenant prêt à mettre en œuvre la méthode du protocole dans le contrôleur de vue de présentation. Pour ce faire, sélectionnez d'abord le fichier WriteReviewViewController.swift dans le navigateur de projet. Ensuite, ajoutez la nouvelle méthode updateAppCategory présentée dans la figure 18 juste en dessous de la méthode prepareForSegue : .

Figure 18 - Ajouter la méthode de protocole updateAppCategory au fichier WriteReviewViewController.swift .

Voici la répartition de ce code :

  • Cette méthode accepte un objet AppCategoryEntity qui est transmis par le contrôleur de vue présenté.
  • Il prend la valeur dans la propriété categoryID de l'entité et la stocke dans la variable d'instance appCategoryID de .
  • Il obtient également le nom de la catégorie à partir de la propriété name de l'entité et met à jour l'étiquette de texte détaillée de la cellule d'affichage du tableau App Category .
  • La dernière ligne de code indique à la vue tableau de recharger ses données, ce qui rafraîchit l'affichage de la cellule de la vue tableau pour refléter la nouvelle catégorie.

Etape 5 : Enregistrer une référence au contrôleur de la vue de présentation dans la propriété du délégué

Vous êtes maintenant prêt pour l'étape finale. Nous devons stocker une référence au contrôleur de vue de présentation (le contrôleur de vue d'écriture ) dans la propriété contrôleur de vue de présentation délégué . Un bon endroit pour le faire est dans le prepareForSegue : .

  1. Dans le , préparez-vous pour la Ségue : du fichier WriteReviewViewController.swift , ajoutez le code indiqué dans Figure 20 .

    Figure 20 - Enregistrez une référence au contrôleur de la vue présentée dans la propriété de délégué du contrôleur de la vue présentée.

  2. Pendant que nous sommes ici, nous devrions également changer le postReview : pour enregistrer la catégorie d'application sélectionnée. Faites défiler l'écran jusqu'au postReview : et modifiez la deuxième ligne de code comme indiqué dans Figure 20 .

Figure 20 - Stocker l'ID de la catégorie d'application sélectionnée sur l'objet ReviewEntity .

Tester le nouveau code

Vous êtes maintenant prêt à passer le code pour un essai routier !

  1. Cliquez sur le bouton "Run" de Xcode . Lorsque l'application apparaît dans le simulateur, sélectionnez l'option Écrire un commentaire . Vous devriez voir que le texte détaillé de la ligne App Category est réglé sur Select ( Figure 21 ).

    Figure 21 - Le texte détaillé de la ligne App Category est réglé sur Select .

  2. Cliquez sur la ligne App Category pour naviguer vers la scène App Category . Il ne doit y avoir aucune catégorie avec une coche à côté. Cliquez sur l'une des catégories et vous devriez voir une coche à côté de celle-ci. Si vous cliquez sur une autre ligne, la coche doit disparaître de la ligne précédente et apparaître sur la nouvelle ligne sélectionnée comme indiqué dans Figure 22 . Ceci est dû au code qui s'exécute dans la tableView:didSelectRowAtIndexPath du contrôleur de vue : method.

    Figure 22 - Une coche doit apparaître dans la ligne sélectionnée.

  3. Cliquez maintenant sur le bouton "Retour" (étiqueté Write Review ) dans le coin supérieur gauche de la vue pour retourner à la scène Write Review . Vous devriez voir la catégorie que vous avez sélectionnée en dernier lieu dans l'étiquette détaillée de la catégorie d'application comme indiqué dans Figure 23 !

Figure 23 - La catégorie nouvellement sélectionnée affichée dans la ligne App Category

Conclusion

Nous avons couvert beaucoup de territoire ici, mais je voulais présenter toutes ces informations dans un seul poste afin que vous puissiez voir tout le processus de transmission des informations aux contrôleurs de vue et de leur part. Au cours de ce processus, vous avez appris une application pratique des protocoles Swift ainsi que la manière d'afficher une coche dans une ligne de vue de tableau. Je vous recommande de suivre ces étapes plusieurs fois pour vous assurer que vous comprenez les concepts importants de l'iOS décrits ici.

Click to rate this post!
[Total: 0 Average: 0]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *