Swift From Scratch Délégation et Propriétés

Dans la leçon précédente, vous avez créé un projet Swift simple dans Xcode, une application de base de tâches. Dans cet article de Swift From Scratch, nous allons ajouter la possibilité de créer des tâches. En chemin, vous en apprendrez plus sur les actions, la délégation et les propriétés.

Conditions préalables

Si vous souhaitez suivre avec moi, assurez-vous que Xcode 8.3.2 ou une version supérieure est installé sur votre ordinateur. Vous pouvez télécharger Xcode 8.3.2 à partir de l'App Store d'Apple.

1. Ajout d'éléments

À la fin de cette leçon, l'utilisateur pourra ajouter de nouvelles tâches en appuyant sur un bouton de la barre de navigation, présentant une vue avec un champ de texte et un bouton. Commençons par créer le contrôleur de vue qui gérera l’ajout de nouvelles tâches, le AddItemViewController classe.

Étape 1: Créer AddItemViewController

Choisir Nouveau> Fichier…  de Xcode Fichier menu et sélectionnez le Cacao Touch Class modèle de la liste des iOS> Source des modèles.

Nommez la classe AddItemViewController et assurez-vous qu'il hérite de UIViewController. Vérifiez que La langue est réglé sur Rapide et cela Créer également un fichier XIB est décochée.

Indiquez à Xcode où vous souhaitez enregistrer le fichier pour le AddItemViewController classe et clic Créer.

Étape 2: Ajouter des sorties et des actions

Avant de créer l'interface utilisateur du AddItemViewController classe, nous devons créer un point de vente pour le champ de texte et deux actions, une pour un bouton d’annulation dans la barre de navigation et une autre pour le bouton de création situé sous le champ de texte..

L'ajout d'un point de vente devrait être familier maintenant. Créer un point de vente dans le AddItemViewController classe et nommez-le champ de texte comme indiqué ci-dessous.

class AddItemViewController: UIViewController @IBOutlet var textField: UITextField! Remplacer func viewDidLoad () super.viewDidLoad () Remplacer func didReceiveMemoryWarning () super.didReceiveMemoryWarning ()

La création d'une action est très similaire à la création d'une méthode d'instance. En fait, le @IBAction Cet attribut n’est rien de plus qu’un indice pour Interface Builder. En préfixant une méthode avec le @IBAction attribut, nous nous assurons qu'Interface Builder est informé de la méthode, ce qui nous permet de le connecter au storyboard. Nous allons laisser les corps des deux actions vides pour l'instant.

class AddItemViewController: UIViewController @IBOutlet var textField: UITextField! override func viewDidLoad () super.viewDidLoad () override func didReceiveMemoryWarning () super.didReceiveMemoryWarning () @IBAction func cancel (_ expéditeur: Tous)  @IBAction func create (_ expéditeur: Toutes,

Étape 3: Créer l'interface utilisateur

Ouvrir Tableau principal dans le Navigateur de projet et faites glisser un Contrôleur de vue du Bibliothèque d'objets sur la droite. Avec le contrôleur de vue sélectionné, ouvrez le Inspecteur d'identité à droite et réglé Classe personnalisée> Classe à AddItemViewController.

Pour ajouter une barre de navigation à la vue d'ajout d'élément, sélectionnez l'onglet Ajouter un contrôleur de vue d'article et choisir Intégrer dans> Contrôleur de navigation du Éditeur menu. Cela fera la Ajouter un contrôleur de vue d'article le contrôleur de vue racine d'un contrôleur de navigation.

L’étape suivante consiste à ajouter un élément de bouton dans la barre de navigation de Contrôleur de vue-pas le Ajouter un contrôleur de vue d'article-et mettre sa Identifiant à Ajouter dans le Inspecteur d'attributs.

Lorsque l'utilisateur appuie sur le Ajouter bouton, le Ajouter un contrôleur de vue d'article devrait être présenté sous forme modale. Pour ce faire, appuyez sur le bouton Contrôle touche et glisse de la Ajouter bouton au Contrôleur de navigation, en sélectionnant Présenter Modalement dans le menu qui apparaît. Cela créera une transition entre le Ajouter un contrôleur de vue d'article à la nouvelle Contrôleur de navigation.

Faites glisser un champ de texte et un bouton du Bibliothèque d'objets et les ajouter à la Ajouter un contrôleur de vue d'article scène. Sélectionnez le Ajouter un contrôleur de vue d'article et connectez le champ de texte sortie avec le champ de texte et la créer(_:) action avec le bouton. le créer(_:) l'action doit être déclenchée lorsque le Retouche à l'intérieur l'événement est déclenché. Changez le titre du bouton en Créer et ajouter les contraintes de mise en page nécessaires au champ de texte et au bouton.

Pour terminer l’interface utilisateur, ajoutez un bouton dans le coin supérieur gauche de la barre de navigation. Ajouter un contrôleur de vue d'article et mettre sa Identifiant à Annuler. Avec le Ajouter un contrôleur de vue d'article sélectionné, ouvrez le Inspecteur de connexions et connectez le Annuler(_:) action à la Annuler bouton.

Générez et exécutez l'application en appuyant sur Commande-R pour vérifier que tout est branché correctement.

2. Implémentation d'un protocole de délégué

Lorsque l'utilisateur appuie sur le Créer bouton pour ajouter une tâche, le contrôleur de vue pour ajouter un élément doit en informer le contrôleur de vue. La délégation est une solution parfaite pour ce scénario. Le processus est assez simple.

Nous créons un protocole de délégué le ViewController classe conforme à. Quand le AddItemViewController instance est créée-lorsque l'utilisateur appuie sur le Ajouter bouton-le ViewController objet est défini en tant que délégué du AddItemViewController exemple, permettant à ce dernier de notifier ViewController exemple quand une nouvelle tâche est créée. Décomposons pour mieux comprendre ce processus.

Étape 1: Déclarez le AddItemViewControllerDelegate Protocole

Ouvrir AddItemViewController.swift et déclarer le AddItemViewControllerDelegate protocole en dessous de la déclaration d'importation en haut. La déclaration de protocole ressemble à une déclaration de classe. le protocole le mot clé est suivi du nom du protocole.

importer le protocole UIKit AddItemViewControllerDelegate contrôleur func (contrôleur _:: AddItemViewController, didAddItem: String)

Le concept est très similaire aux protocoles en Objective-C. Le nom du protocole est AddItemViewControllerDelegate et il définit une méthode, contrôleur (_: didAddItem :).

Étape 2: Déclarez le déléguer Propriété

L’objet qui doit implémenter le protocole de délégué est le délégué de AddItemViewController. Nous devons d’abord créer une propriété pour le délégué, comme indiqué dans l’extrait ci-dessous..

class AddItemViewController: UIViewController @IBOutlet var textField: UITextField! var delegate: AddItemViewControllerDelegate?…

le déléguer propriété est de type AddItemViewControllerDelegate?, un type facultatif, car nous ne pouvons pas être certains que le déléguer la propriété n'est pas néant. Notez que le nom du protocole n'est pas entouré de crochets, contrairement à Objective-C..

Étape 3: Mettre en œuvre des actions

La méthode du délégué, contrôleur (_: didAddItem :), sera invoqué dans le créer(_:) action comme indiqué ci-dessous. Pour garder l'exemple simple, nous ne faisons aucune validation sur l'entrée de l'utilisateur.

Nous utilisons un chaînage facultatif pour appeler la méthode delegate sur l'objet delegate, ce qui signifie que la méthode delegate n'est invoquée que si déléguer la propriété est définie. La valeur du champ de texte est temporairement stockée dans une constante, article.

@IBAction func create (_ expéditeur: Any) si item = textField.text delegate? .Controller (self, didAddItem: item)

La mise en œuvre de la Annuler(_:) l'action est facile. Nous ne faisons que rejeter le AddItemViewController exemple.

@IBAction func cancel (_ expéditeur: N'importe lequel) licencie (animé: true)

Étape 4: Définir le délégué

Il manque cependant une pièce du puzzle. le déléguer propriété du AddItemViewController l'instance n'est pas définie pour le moment. Nous pouvons résoudre ce problème en mettant en œuvre le préparer (pour: l'expéditeur :) méthode dans le ViewController classe. Cependant, nous devons d’abord revoir le storyboard.

Ouvrir Tableau principal et sélectionnez le lien reliant le Ajouter bouton avec le Contrôleur de navigation. Ouvrez le Inspecteur d'attributs et mettre la segue Identifiant àAddItemViewController.

Ensuite, implémentez le préparer (pour: l'expéditeur :) méthode dans le ViewController classe comme indiqué ci-dessous. Noter la passer outre mot-clé préfixant la méthode. Cela devrait être familier maintenant.

override func prepare (pour segue: UIStoryboardSegue, expéditeur: Any?) if segue.identifier == "AddItemViewController" laissez navigationController = segue.destination as?? UINavigationController laissez addItemViewController = navigationController? .TopViewController as? AddItemViewController si let viewController = addItemViewController viewController.delegate = self

Nous commençons par vérifier l'identifiant de la division, en nous assurant que nous nous préparons pour la division correcte. Nous demandons ensuite au segue son contrôleur de vue de destination. Vous pouvez vous attendre à ce que ce soit le AddItemViewController exemple, mais rappelez-vous que nous avons fait du contrôleur de vue le contrôleur de vue racine d’un contrôleur de navigation. Cela signifie que nous devons demander au contrôleur de navigation, le contrôleur de vue de destination de la segue, son contrôleur de vue de dessus..

le addItemViewController la constante est de type AddItemViewController? à cause de l'utilisation du comme? mot-clé. En d'autres termes, en utilisant comme? nous diminuons la valeur de la topViewController propriété à un type optionnel.

dans le si déclaration, nous déballons le facultatif et définissons la déléguer propriété à la ViewController exemple.

Je suis sûr que vous avez remarqué l’utilisation de plusieurs options dans la mise en œuvre du préparer (pour: l'expéditeur :) méthode. Lors de l'interaction avec les API Objective-C, il est toujours préférable de jouer prudemment. Lors de l'envoi de messages à néant convient parfaitement à Objective-C, mais pas à Swift. En raison de cette différence essentielle, vous devez toujours faire attention lorsque vous interagissez avec des API Objective-C dans Swift. L'exemple ci-dessus illustre bien cela.

Étape 5: Mettre en œuvre le AddItemViewControllerDelegate Protocole

Mise en œuvre du AddItemViewControllerDelegate protocole est similaire à la mise en œuvre de la UITableViewDataSource protocole. On commence par se conformer à la ViewController classe au protocole comme indiqué ci-dessous.

classe ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AddItemViewControllerDelegate …

Ensuite, nous implémentons les méthodes du AddItemViewControllerDelegate protocole, ce qui revient à mettre en œuvre la contrôleur (_: didAddItem :) méthode. Nous ajoutons le nouvel élément à celui du contrôleur de vue. articles propriété, recharger la vue table et fermer le contrôleur de vue d'ajout d'élément.

// MARK: Ajouter un élément de vue Contrôleur de méthodes de contrôle de contrôleur d'élément (_ contrôleur: AddItemViewController, didAddItem: String) // Mise à jour de la source de données items.append (didAddItem) // Recharger la vue de table tableView.reloadData () // Dismiss Add Item View Contrôleur licencié (animé: true)

Étape 6: Construire et exécuter

Générez et exécutez l'application pour vérifier si vous pouvez ajouter de nouveaux éléments à la liste des tâches. Nous ne validons actuellement pas l'entrée de l'utilisateur. En exercice, affichez une vue d'alerte à l'utilisateur s'il appuie sur le bouton Créer bouton et le champ de texte est vide. Ajouter une tâche vide n'est pas très utile. Droite?

Conclusion

Dans cette leçon, vous avez appris à déclarer et à mettre en œuvre un protocole personnalisé. Vous avez également appris à créer des actions et à les associer dans Interface Builder. Dans la prochaine leçon, nous allons compléter notre application de tâches en ajoutant la possibilité de supprimer des tâches, et nous allons également améliorer l'expérience utilisateur de l'application..

En attendant, consultez certains de nos autres cours et tutoriels sur le développement iOS en langage Swift!