Développement iOS avec Swift2 - iOS avancé

Dans ce chapitre, nous couvrirons certaines fonctionnalités avancées telles que la création de plusieurs vues sur notre application, l'ajout de barres de navigation, l'ajout de vues de table, le stockage de données dans l'application, la création d'applications Web, etc.

Veuillez lire attentivement chaque section, car ce chapitre contient la plupart des éléments dont nous avons besoin lors du développement d'applications.

Contrôleur à vues multiples

Dans nos applications précédentes, nous ne donnions qu'un seul contrôleur de vue / vue. Cependant, nous pouvons avoir plusieurs vues dans notre application et nous pouvons effectuer sur n'importe laquelle d'entre elles indépendamment.

Par conséquent, nous commencerons par créer un nouveau projet; le nom de ce projet a plusieurs vues. Comme tous les autres projets, ce projet a également un contrôleur de vue et un fichier Swift pour ce contrôleur. (Vous pouvez le voir en sélectionnant afficher et voir ses propriétés dans l'inspecteur d'identité.)

La capture d'écran suivante montre à quoi ressemble notre vue actuelle -

Sur le côté droit (inspecteur d'identité), nous pouvons voir la classe qui est liée à notre contrôleur de vue. Cette flèche à gauche est le point d'entrée. Ceci est la première vue de notre application qui s'affichera après le démarrage de l'application.

Ajout d'un deuxième contrôleur à vues multiples

Pour ajouter d'autres contrôleurs de vue à notre application, nous rechercherons le contrôleur de vue dans notre bibliothèque d'objets. Une fois que nous l'avons trouvé, nous allons faire glisser le contrôleur de vue vers notre main.stroryboard, juste à l'extérieur des autres vues.

Voici à quoi devrait ressembler votre application. Maintenant, nous avons ajouté un contrôleur de vue, mais maintenant nous devrons également créer une classe de contrôleur de vue pour notre vue nouvellement ajoutée.

Right click on your project → new File → cocoa Touch Class → Nommez-le comme vous le souhaitez, nous le nommerons «SecondViewController».

C'est ainsi que vous créez un fichier de classe pour votre contrôleur de vue. Maintenant, revenez à votre «main.storyboard», cliquez sur votre deuxième contrôleur de vue et voyez son inspecteur d'identité.

Le champ de classe doit être vide pour le moment, alors cliquez sur ce champ et commencez à taper le nom de votre classe que vous avez ajouté à la dernière étape. S'il apparaît, cliquez sur Entrée.

Nous avons maintenant créé un contrôleur à vues multiples et ajouté le fichier de classe de contrôleur pour cette vue. Cependant, si vous exécutez l'application, elle n'affichera toujours pas votre deuxième vue. Pourquoi?

Parce que nous n'avons pas ajouté de fonction, ce qui nous amènera à cette vue. En bref, nous n'avons pas encore ajouté la navigation à notre application. Ne t'en fais pas; nous en parlerons dans la section suivante.

Ajout de la navigation à l'application

Le processus de transition d'une vue à une autre s'appelle Segueing, c'est-à-dire fait en créant une transition entre les deux vues. Pour ce faire, ajoutez un bouton dans le premier contrôleur de vue et contrôlez le glisser vers votre deuxième vue. Lorsque vous relâchez le bouton, vous verrez certaines options comme indiqué dans la capture d'écran ci-dessous.

Sélectionnez l'option Afficher dans la séquence d'actions. Maintenant lancez votre application, vous verrez qu'en cliquant sur un bouton, votre deuxième vue apparaît (Pour voir plus clairement, ajoutez quelque chose dans votre deuxième vue, afin que vous puissiez vous identifier).

Cependant, vous ne pouvez plus revenir à votre première vue. Pour cela, nous avonsNavigation controllers.

Ajout d'un contrôleur de navigation

Sélectionnez votre premier contrôleur de vue et dans la barre supérieure, cliquez sur Editor → Embed in → Navigation controller.

Maintenant, notre application devrait ressembler à la capture d'écran suivante.

Nous devrions faire en sorte qu'il y ait une petite rangée gris clair au-dessus de la vue. Maintenant, lorsque nous exécutons l'application, nous pouvons voir qu'il y a une barre de navigation en haut de la vue. Lorsque nous cliquons sur le bouton, nous allons passer à la deuxième vue, où nous verrons un bouton de retour dans cette barre de navigation. Cliquez dessus et nous reviendrons à la vue initiale.

Ajout du titre et du bouton Retour à la barre de navigation

Pour ajouter un titre à votre barre de navigation, cliquez sur la barre de navigation et voyez son inspecteur d'attributs. Là, nous verrons -

  • Title - Ce sera le titre de la barre de navigation, qui apparaît au centre.

  • Prompt - Cela apparaît en haut de la barre de titre, au centre.

  • Back Button - Ici, vous pouvez modifier le texte qui apparaît dans le bouton de retour.

Actuellement, le bouton qui passe la vue est situé sur notre vue, ce qui peut ne pas convenir si nous voulons que quelque chose d'autre apparaisse à l'écran. Par conséquent, nous ajouterons un élément de bouton de barre dans la barre de navigation, ce qui nous mènera à notre deuxième vue. Cependant, pour cela, nous devons d'abord supprimer le dernier bouton que nous avons ajouté.

Ajout d'un élément de bouton de barre

Recherchez l'élément de bouton de barre dans la bibliothèque d'objets et faites-le glisser vers le côté droit de la barre de navigation. Nommez-le comme - "Suivant>", faites glisser le contrôle de celui-ci vers la deuxième vue, sélectionnez Afficher comme nous l'avons fait avec le dernier bouton que nous avons ajouté.

Maintenant, lancez l'application, elle aura l'air plus propre et meilleure. C'est tout ce que nous allons faire avec Navigation pour le moment. Dans les chapitres suivants, nous modifierons la barre de navigation à l'aide du code Swift, si nécessaire.

Vues de table

Un tableau présente les données sous la forme d'une liste à colonne unique contenant plusieurs lignes, qui peuvent être divisées en sections. Les tableaux doivent être utilisés pour présenter les données de manière propre et efficace.

Dans cette section, nous allons comprendre comment ajouter des vues de tableau, ajouter des cellules prototypes, ajouter une source de données et des délégués pour une vue de tableau, modifier les propriétés d'un tableau et définir des données dynamiques pour les cellules de vue de tableau.

Ajout d'une vue de table

Pour ajouter une vue de table, nous allons d'abord créer un nouveau projet et le nommer comme - «tableView». Ensuite, allez dans la bibliothèque d'objets et recherchez Table View, nous verrons la vue table, le contrôleur de vue table et de nombreuses autres options. Cependant, nous devons sélectionner la vue tableau, la faire glisser et l'ajouter à la vue par défaut Controller.

Ajout d'une cellule prototype

Étirez la vue de tableau pour qu'elle couvre la vue complète, tandis que votre vue de tableau est mise en surbrillance. Vérifiez son inspecteur d'attributs, il y a un champ appelé Cellules prototypes, qui est actuellement 0. Nous devrions changer sa valeur à 1, maintenant votre vue devrait ressembler à ceci -

Changer l'identifiant de cellule

Maintenant, dans votre vue, cliquez sur votre cellule prototype (ce qui est un peu délicat). Ainsi, dans votre plan de document, cliquez sur Contrôleur de vue → Affichage → Vue de tableau → Cellule de vue de tableau, et maintenant dans son inspecteur d'attributs, il y a une colonne appelée Identifiant, cliquez dessus et nommez-la «Cellule». Consultez les captures d'écran suivantes pour comprendre les étapes ci-dessus.

Ajouter un délégué et une source de données

Pour rendre nos vues de table dynamiques, nous avons besoin qu'elles chargent des données dynamiques. Par conséquent, nous avons besoin d'un délégué et d'une source de données pour cela. Pour créer un délégué et une source de données de votre table, contrôlez le glisser de la vue de la table vers votre contrôleur de vue ou le bouton jaune en haut du contrôleur de vue, comme indiqué dans la capture d'écran ci-dessous.

Lorsque nous relâcherons le curseur, nous y verrons deux options, dataSource et déléguer, sélectionnez-les une par une (lorsque vous sélectionnez une option, la fenêtre contextuelle se cachera, vous devrez répéter l'étape ci-dessus pour ajouter une deuxième option) . Maintenant, ça devrait ressembler à -

C'est tout ce que nous allons faire avec notre UI / Main.Storyboard, pour le moment. Passez maintenant au fichier «ViewController.swift». AjouterUITableViewDelegate, UITableViewDataSource, à votre viewController.swift comme indiqué ci-dessous -

Cependant, maintenant Xcode affichera une erreur dans cette ligne.

C'est parce qu'il y a quelques méthodes où nous devons utiliser UITableView

Pour voir ces méthodes, Command + cliquez sur UITableViewDataSouce, et copiez les deux premières méthodes, ayant les arguments «numberOfRowsInSection», «cellForRowAtIndex» et collez-les dans ViewController.swift, avant notre viewDidLoad ().

Supprimer cette ligne @available(iOS 2.0, *), à partir des deux méthodes et ajoutez les accolades ouvrantes et fermantes «{}». Maintenant, la vue ressemblera à ceci -

Xcode doit afficher une erreur dans les deux fonctions. Cependant, ne vous inquiétez pas, car nous n'avons pas ajouté de type de retour de ces fonctions.

numberOfRowsInSection- Cette fonction définit le nombre de lignes que contiendra notre section. Alors maintenant, ajoutez cette ligne à votre méthode.

return 1 //This will return only one row.

cellForRowAt - Cette méthode renvoie le contenu de chaque cellule, indexPathcontient l'index de chaque cellule. Nous allons créer une cellule, puis nous attribuerons une valeur à cette cellule et enfin nous retournerons la cellule.

Maintenant, vos fonctions devraient ressembler à ceci -

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 1; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: 
   UITableViewCellStyle.default, reuseIdentifier: "Cell") 
   cell.textLabel?.text = "First Row" 
   return cell 
}

Dans la première ligne, nous créons une cellule avec le style par défaut, et reuseIdentifier est le nom de la cellule prototype que nous avons fabriquée.

Cell.textLable?.text - Ceci définit le texte qui doit apparaître comme titre de cette cellule.

Enfin, nous renvoyons une cellule à partir de là. Essayez d'exécuter votre application maintenant, elle devrait ressembler à ceci -

Application du calendrier

Dans cette application, nous continuerons notre dernier projet, et nous ferons une application où nous imprimons le tableau de 2 (2… 10…. 20).

Donc, pour créer cette application, modifiez simplement le fichier du contrôleur de vue du projet.

Modifiez les fonctions comme indiqué ci-dessous -

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 10; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
}

Maintenant, exécutez votre application. Il devrait ressembler à celui ci-dessous.

Maintenant que nous avons terminé les vues de table et créé une application, voici un défi rapide à résoudre.

Défi

Créez une application, où nous imprimons la table de comptage du nombre que l'utilisateur saisit.

Hint- Prenez l'entrée, ajoutez un bouton qui, lorsqu'il est enfoncé, chargera la table avec le comptage de ce nombre. Ici, nous aurons également besoin de la fonction suivante, qui rechargera les données de la table.

tableView.reloadData()

Ceci est un défi pour vous car nous avons couvert tous les sujets concernant cette application, nous ne fournirons donc pas de solution pour cela.

Application de minuterie d'oeufs

Dans cette application, nous utiliserons le concept de Timer() et Class Constructor, qui gère le temps. Nous vous fournirons le concept et le codage. Vous devez créer l'interface utilisateur vous-même, car nous avons déjà discuté de chaque élément de l'interface utilisateur à plusieurs reprises dans nos chapitres précédents. (Bien que nous fournirons des conseils pour tout ce qui semble assez nouveau).

La mise en page finale de votre application devrait ressembler à ceci:

Que se passe-t-il dans cette application?

  • L'étiquette de titre a une valeur de départ 210.

  • En cliquant sur le bouton de lecture, la valeur devrait diminuer de un par seconde.

  • Au clic de pause, la valeur doit s'arrêter là seulement.

  • Au clic de -10, la valeur doit être réduite de 10 et la décrémentation doit continuer.

  • Au clic de +10, la valeur doit être augmentée de 10 et la diminution doit continuer.

  • En cliquant sur Reset, la valeur doit devenir 210.

  • La valeur ne doit jamais descendre en dessous de 0.

Concept

  • Nous utiliserons une variable de classe Timer () → var timer = Timer ().

  • Nous allons définir une valeur pour cette variable de minuterie que nous venons de créer.

    • timer = Timer.scheduledTimer (timeInterval: 1, target: self, selector: #selector (ViewController.processTimer), userInfo: nil, repeats: true)

    • timeInterval -> est l'intervalle de temps que nous voulons utiliser,

    • target -> est le contrôleur de vue qui doit être effectué,

    • selector -> est le nom de la fonction qui utilisera cette minuterie,

    • userInfo -> null et se répète, oui nous voulons répéter donc ce sera vrai.

Minuterie invalide

Pour arrêter une minuterie par programmation, nous ajouterons timer.invalidate() fonction.

Elements we have used -

Navigation bar - Dans la barre de navigation, nous avons ajouté trois éléments.

  • Élément de bouton de barre, un à gauche et un à droite.
  • Titre nommé - «Our Egg Timer».

Toolbar - Une barre d'outils apparaît au bas de l'écran d'une application et contient des boutons pour effectuer des actions pertinentes pour la vue actuelle ou le contenu qu'elle contient.

Les barres d'outils sont translucides et peuvent avoir une teinte d'arrière-plan. Ils se cachent souvent lorsqu'il est peu probable que les gens en aient besoin.

Nous avons ajouté une barre d'outils au bas de notre interface utilisateur, qui contient 5 éléments.

  • Trois éléments de bouton de barre, nommés -10, Reset et +10.
  • Deux espaces flexibles: espace flexible entre les éléments du bouton de la barre -

Comment ajouter une icône à l'élément de bouton de la barre?

Sélectionnez votre élément de bouton de barre. Cliquez sur l'élément de votre bouton de barre, accédez à l'inspecteur d'attributs, cliquez sur Sélectionner un élément et choisissez l'élément dans la liste déroulante qui apparaît.

De même, sélectionnez des éléments pour tous les autres boutons et créez une interface utilisateur comme indiqué ci-dessus. Ajoutez une étiquette au centre de la vue et connectez-la en tant que prise, nommez-la comme -timeLeftLabel.

Action pour la minuterie de démarrage

Voici le programme de la minuterie de démarrage.

@IBAction func startTimerButton(_ sender: Any) { 
   if !timerActive { 
      timerActive = true 
      eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
      #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
   } 
}

Créez la fonction suivante -

func stopTimer() { 
   timerActive = false 
   eggTimer.invalidate() 
}

Action pour la fonction d'arrêt

Voici le programme de la fonction d'arrêt.

@IBAction func pauseTimerButton(_ sender: Any) { 
   stopTimer() 
}

Action pour soustraire du temps

Voici le programme de soustraction du temps.

@IBAction func subtractTime(_ sender: Any) { 
   if timeLeft > 10 { 
      timeLeft = timeLeft - 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
}

Action de réinitialisation de l'heure

Voici le programme de réinitialisation de l'heure.

@IBAction func resetTimer(_ sender: Any) { 
   timeLeft = 210 
   timeLeftLabel.text = String(timeLeft) 
}

Action pour addTime

Voici le programme pour ajouter du temps.

@IBAction func addTime(_ sender: Any) { 
   timeLeft = timeLeft + 10 
   timeLeftLabel.text = String(timeLeft) 
}

Maintenant, le viewController.swift devrait ressembler à -

import UIKit 
class ViewController: UIViewController { 
   @IBOutlet weak var timeLeftLabel: UILabel! 
   var eggTimer = Timer()  // Initialize the Timer class. 
   var timerActive = false // Prevents multiple timers from firing. 
   var timeLeft = 210  
   func stopTimer() { 
      timerActive = false 
      eggTimer.invalidate() 
   } 
     
   func processTimer() { 
      if timeLeft <= 0 { 
         stopTimer() 
         return 
      }     
      timeLeft = timeLeft - 1; 
      timeLeftLabel.text = String(timeLeft) 
   } 
    
   @IBAction func startTimerButton(_ sender: Any) { 
      if !timerActive {
         timerActive = true 
         eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
         #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
      } 
   } 
     
   @IBAction func pauseTimerButton(_ sender: Any) { 
      stopTimer() 
   } 
    
   @IBAction func subtractTime(_ sender: Any) { 
      if timeLeft > 10 { 
         timeLeft = timeLeft - 10 
         timeLeftLabel.text = String(timeLeft) 
      } 
   } 
     
   @IBAction func resetTimer(_ sender: Any) { 
      timeLeft = 210 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   @IBAction func addTime(_ sender: Any) { 
      timeLeft = timeLeft + 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
   }  
   override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated
   } 
}

C'est tout ce que nous ferons dans notre application, essayez d'exécuter l'application, elle devrait fonctionner correctement.

Stockage des données sur le stockage local

Stocker des données sur un stockage local signifie utiliser le stockage de l'appareil local pour stocker des données liées à l'application sur l'appareil. Nous avons deux façons de stocker les données sur un stockage local à savoirNSUserDefault et CoreData.

Comprenons-les en détail.

NSUserDefaults

NSUserDefaults est destiné à stocker de petits éléments de données tels que des préférences, des paramètres ou des valeurs individuelles. Pour utiliser UserDefaults dans notre application, il suffit de créer une référence au nsuserDefaults via notre code comme indiqué ci-dessous.

let defaultValues = NSUserDefaults.standardUserDefaults()

Pour définir les valeurs des données dans UserDefaults, nous pouvons utiliser le code suivant -

defaultValues.setObject("Simplified iOS", forKey: "nameKey")  
func setDouble(value: Double, forKey defaultName: String) 
func setBool(value: Bool, forKey defaultName: String) 
func setObject(value: AnyObject?, forKey defaultName: String) 
func setURL(url: NSURL?, forKey defaultName: String) 
func setInteger(value: Int, forKey defaultName: String) 
func setFloat(value: Float, forKey defaultName: String)

Pour obtenir des valeurs de NSUserDefaults, nous pouvons utiliser le code suivant.

func boolForKey(defaultName: String) -> Bool 
func integerForKey(defaultName: String) -> Int 
func floatForKey(defaultName: String) -> Float 
func doubleForKey(defaultName: String) -> Double 
func objectForKey(defaultName: String) -> AnyObject? 
func URLForKey(defaultName: String) -> NSURL?

Données de base

CoreData est un framework persistant, qui prend en charge les transactions de données volumineuses. CoreData vous permet de créer un modèle relationnel entité-attribut pour stocker les données utilisateur. CoreData est un framework et peut utiliser SQLite, des formats binaires pour stocker des données.

Pour utiliser CoreData dans notre application, nous commencerons par un nouveau projet et nous nous assurerons de cocher «Utiliser les données de base» lors de la création du projet.

Login Using core Data - Créez un nouveau projet, sélectionnez utiliser CoreData comme indiqué dans la capture d'écran suivante.

Continuez jusqu'à ce que le projet soit ouvert, maintenant nous voyons que le projet a plus de fichiers que nos projets précédents.

Ce fichier CoreData_demo.xcdatamodeld est notre base de données dans laquelle nous allons créer notre table utilisateur et stocker des données.

Concept - Le problème avec CoreData, c'est que même si nous fermons l'application et l'ouvrons après des mois, elle contiendra toujours les données que nous avons stockées, ce que nous verrons dans la prochaine application que nous créerons.

Nous allons maintenant voir comment ajouter des données de base et récupérer des données de base.

Adding Core Data- Pour ajouter CoreData, cliquez sur le fichier CoreData_demo.xcdatamodeld et nous verrons alors que les entités sont vides. Cliquez sur le bouton Ajouter une entité, cela ajoutera une entité, double-cliquez maintenant sur le nom de l'entité et renommez-le comme vous le souhaitez.

Cliquez maintenant sur l'entité et nous pouvons voir que le champ des attributs est vide. Cliquez sur le symbole plus et renommez l'entité. Sélectionnez le type d'entité dans le champ suivant.

Nous y avons ajouté une entité et un attribut. Maintenant, si nous allons auAppDelegate.swift, nous pouvons voir que deux nouvelles fonctions ont été ajoutées car nous avons sélectionné CoreData. Les deux fonctions ajoutées sont -

Note - Importez CoreData dans votre fichier avant de continuer.

Saving data to Core Data - Pour enregistrer certaines données dans CoreData, nous devons créer un objet de AppDelegate Class.

let appDelegate = UIApplication.shared.delegate as! AppDelegate

Et, un objet de contexte

let context = appDelegate.persistentContainer.viewContext

Ensuite, nous devons créer un objet entité, qui appellera notre entité -

let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)

Nous allons maintenant définir la valeur de cet attribut que nous avons créé.

newValue.setValue(textField.text, forKey: "name")

Nous enregistrerons les données en utilisant

context.save();

Fetching from core data- Lors de la récupération, les deux étapes ci-dessus (création de appDelegate et du contexte) seront les mêmes. Ensuite, nous créerons une requête de récupération.

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")

Nous allons créer un objet pour stocker le résultat.

let results = try context.fetch(request)

Ensuite, nous passerons en revue les résultats selon nos exigences. Nous verrons plus de CoreData avec la prochaine application que nous créerons.

Challenge- Essayez de créer une application, où l'utilisateur entre le nom, puis clique sur connexion et ferme l'application. La prochaine fois que l'utilisateur ouvrira l'application, il devra être encore connecté. Ensuite, ajoutez un bouton - déconnexion, et s'il clique dessus, l'application demandera à nouveau le nom d'utilisateur.

Connexion / déconnexion à l'aide de CoreData

Créez un projet de vue unique appelé «Connexion», sélectionnez l'utilisation de CoreData. Cliquez sur CoreData_demo.xcdatamodeld et ajoutez une entité appelée 'Users'. À l'intérieur, ajoutez un attribut appelé «nom».

Accédez au tableau principal, ajoutez un champ de texte et un bouton de connexion. En dessous, ajoutez une étiquette, double-cliquez dessus et supprimez son contenu. Ensuite, ajoutez un bouton de déconnexion, accédez à son inspecteur d'attributs et rendez «alpha» égal à 0. Maintenant, notre vue devrait ressembler à ceci -

Maintenant, accédez à votre fichier de contrôleur de vue, ouvrez l'éditeur d'assistant et créez des connexions entre les éléments de l'interface utilisateur et votre fichier de contrôleur.

Note- Nous allons également créer des points de vente pour les deux boutons, car nous devons modifier l'apparence de ces boutons. Par exemple - Lorsqu'un utilisateur est connecté, nous masquerons le bouton de connexion, si l'utilisateur n'est pas connecté, nous afficherons la connexion et masquerons le bouton de déconnexion.

Comme nous l'avons déjà mentionné sur l'ajout et la récupération de données à partir de CoreData, nous allons mettre le code ici.

Try-Catch- Vous remarquerez que nous avons utilisé le bloc try-catch plusieurs fois dans le code. C'est parce que si nous n'utilisons pas les blocs try-catch et qu'il y a une exception ou une erreur dans notre programme, l'exécution s'arrêtera. Alors que si nous utilisons les blocs try catch et si une erreur se produit, le bloc catch gère l'erreur. En savoir plus à ce sujet dans notre Tutoriel Swift

Code pour l'application de connexion / déconnexion

Comprenons les différents composants et le code utilisé pour une application de connexion / déconnexion.

Login Button Action - Le code suivant explique comment ajouter une action de bouton de connexion.

var isLoggedIn = false 
@IBAction func logIn(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate
   let context = appDelegate.persistentContainer.viewContext 
   if isLoggedIn { 
      let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
      do { 
         let results = try context.fetch(request) 
         if results.count > 0 { 
            for result in results as! [NSManagedObject] { 
               result.setValue(textField.text, forKey: "name") 
               do { 
                  try context.save() 
               } 
               catch { 
                  print("Update username failed") 
               } 
            } 
            label.text = "Hi " + textField.text! + "!" 
         } 
      } 
      catch { 
         print("Update failed") 
      } 
   } else { 
      let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context) 
      newValue.setValue(textField.text, forKey: "name") 
      do { 
         try context.save() 
         logInButton.setTitle("Update username", for: []) 
         label.alpha = 1 
         label.text = "Hi " + textField.text! + "!" 
         isLoggedIn = true 
         logOutButton.alpha = 1 
      }  
      catch { 
         print("Failed to save") 
      }     
   } 
}

Logout Button Action - Le code suivant explique comment ajouter une action de bouton de déconnexion.

@IBAction func logOut(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   do { 
      let results = try context.fetch(request) 
      if results.count > 0 { 
         for result in results as! [NSManagedObject] { 
            context.delete(result) 
            do { 
               try context.save() 
            } catch { 
               print("Individual delete failed") 
            } 
         } 
         label.alpha = 0 
         logOutButton.alpha = 0 
         logInButton.setTitle("Login", for: []) 
         isLoggedIn = false 
         textField.alpha = 1 
      } 
   } catch { 
      print("Delete failed") 
   } 
}

ViewDidLoad() - Le code suivant explique comment utiliser la fonction ViewDidLoad ().

override func viewDidLoad() { 
   super.viewDidLoad() 
   // Do any additional setup after loading the view, typically from a nib.
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   request.returnsObjectsAsFaults = false 
   do { 
      let results = try context.fetch(request) 
      for result in results as! [NSManagedObject] { 
         if let username = result.value(forKey: "name") as? String { 
            logInButton.setTitle("Update username", for: []) 
            logOutButton.alpha = 1 
            label.alpha = 1 
            label.text = "Hi there " + username + "!" 
         }     
      } 
             
   } catch { 
      print("Request failed") 
   } 
}

N'oubliez pas que vous deviez créer une prise et une action, pour les deux boutons.

Maintenant, enregistrez et exécutez l'application. Connectez-vous, fermez l'application et réexécutez-la. Cela devrait ressembler à ceci.

C'est tout ce que nous ferons avec CoreData. En utilisant les mêmes concepts, nous pouvons créer de nombreuses applications CoreData.

Contrôle du clavier

Dans cette section, nous allons apprendre à contrôler le comportement du clavier. Par exemple - Lorsque nous cliquons en dehors d'un champ de texte après avoir saisi du texte, le clavier ne se ferme pas. Ici, nous allons comprendre comment contrôler le clavier.

Le clavier devrait disparaître en cliquant en dehors du champ de saisie

C'est une tâche simple, pour ce faire, collez simplement le code suivant dans votre fichier viewController, avant de fermer les accolades.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
   self.view.endEditing(true)  
}

En faisant cela, il fera disparaître le clavier en cliquant en dehors du champ de saisie.

Le clavier doit disparaître lorsque vous appuyez sur la touche de retour

Pour faire disparaître le clavier, nous devons ajouter un nouveau type pour notre contrôleur de vue. Nous allons également ajouter un champ de texte et créer sa sortie appelée textField. Enfin, nous ajouterons leUITextFieldDelegate.

Nous allons aussi control + drag de notre champ de saisie au contrôleur de vue et sélectionnez déléguer parmi les options qui s'affichent.

Ensuite, nous ajouterons la fonction suivante.

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
   textField.resignFirstResponder()  
   return true 
}

Le fichier final de View Controller doit ressembler à ceci:

import UIKit 
class ViewController: UIViewController, UITextFieldDelegate { 
   override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
   }  
   override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
   } 
   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
      self.view.endEditing(true) 
   }
   func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
      textField.resignFirstResponder() 
      return true 
   } 
}

Téléchargement de contenu Web - Ouverture de Facebook / Google

Dans cette section, nous allons apprendre à créer une application, qui ouvrira Facebook et Google, lorsque chaque bouton sera enfoncé respectivement. Nous allons également apprendre le concept des vues Web et de la sécurité de la couche de transport des applications. Après cela, vous pourrez créer votre propre navigateur.

Note - Nous avons besoin d'une connexion Internet dans cette application.

Créer une application Web

Nous allons créer une nouvelle application à vue unique, projet iOS. Dans la barre de recherche de la bibliothèque d'objets, nous rechercherons la vue Web, la ferons glisser et l'ajouterons à notre contrôleur de vue dans le main.Storyboard.

Après avoir ajouté la vue Web, nous l'étendrons à tous les coins. L'interface utilisateur de l'application doit ressembler à ceci:

Nous allons ouvrir notre main.storyboard et voir le contrôleur en cliquant sur l'éditeur assistant. Nous allons créer une sortie pour notre webView et une action pour les deux boutons. Lors du chargement, l'application chargera Yahoo dans WebView. En cliquant sur google, il devrait charger Google, et en cliquant sur le bouton Facebook, il devrait charger la page Facebook.

La vue finale devrait ressembler à ceci -

Les captures d'écran suivantes montrent à quoi devraient ressembler les différents écrans de notre application. Si vous essayez d'ouvrir un service Web qui n'est pas https, il affichera une erreur et nous devrons ajouter une exception App Transport Layer Security dans votreinfo.plist fichier.