Sviluppo iOS con Swift2 - iOS avanzato

In questo capitolo, tratteremo alcune funzioni avanzate come la creazione di più viste sulla nostra applicazione, l'aggiunta di barre di navigazione, l'aggiunta di viste tabella, la memorizzazione dei dati nell'applicazione, la creazione di applicazioni Web, ecc.

Si prega di esaminare attentamente ogni sezione, poiché questo capitolo contiene la maggior parte delle cose di cui abbiamo bisogno durante lo sviluppo delle applicazioni.

Controller vista multipla

Nelle nostre applicazioni precedenti, abbiamo fornito un solo controller di visualizzazione / visualizzazione. Tuttavia, possiamo avere più visualizzazioni nella nostra applicazione e possiamo eseguire su qualsiasi di esse in modo indipendente.

Pertanto, inizieremo creando un nuovo progetto; il nome di questo progetto ha più viste. Come ogni altro progetto, anche questo progetto ha un controller di visualizzazione e un file Swift per quel controller. (Puoi vederlo selezionando Visualizza e vedendone le proprietà in Identity Inspector.)

Lo screenshot seguente mostra l'aspetto della nostra visualizzazione corrente:

Sul lato destro (Ispettore di identità), possiamo vedere la classe correlata al nostro controller di visualizzazione. Questa freccia a sinistra è il punto di ingresso. Questa è la prima visualizzazione della nostra applicazione che verrà mostrata dopo l'avvio dell'applicazione.

Aggiunta di un secondo controller di visualizzazione multipla

Per aggiungere altri controller di visualizzazione alla nostra applicazione, cercheremo controller di visualizzazione nella nostra libreria di oggetti. Una volta trovato, trascineremo il controller della vista sul nostro main.stroryboard, appena fuori da qualsiasi altra vista.

Ecco come dovrebbe apparire la tua applicazione. Ora abbiamo aggiunto un controller di visualizzazione, ma ora dovremo anche creare una classe di controller di visualizzazione per la nostra visualizzazione appena aggiunta.

Right click on your project → new File → cocoa Touch Class → Assegnagli un nome come preferisci, lo chiameremo "SecondViewController".

Ecco come creare un file di classe per il controller della vista. Ora, torna al tuo "main.storyboard", fai clic sul tuo secondo controller di visualizzazione e guarda il suo Identity Inspector.

Il campo della classe deve essere vuoto in questo momento, quindi fai clic su quel campo e inizia a digitare il nome della tua classe che hai aggiunto nell'ultimo passaggio. Se viene visualizzato, fai clic su Invio.

Abbiamo ora creato un controller di visualizzazione multipla e aggiunto il file di classe controller per quella visualizzazione. Tuttavia, se esegui l'applicazione, non mostrerà ancora la tua seconda vista. Perché?

Perché non abbiamo aggiunto una funzione, che ci porterà a quella vista. In breve, non abbiamo ancora aggiunto la navigazione alla nostra applicazione. Non preoccuparti; lo tratteremo nella sezione seguente.

Aggiunta della navigazione all'applicazione

Viene chiamato il processo di transizione da una vista all'altra Segueing, cioè fatto creando il segue tra le due viste. Per fare ciò, aggiungi un pulsante nel primo controller di visualizzazione e trascina il controllo da esso alla seconda visualizzazione. Quando rilasci il pulsante, vedrai alcune opzioni come mostrato nello screenshot qui sotto.

Seleziona l'opzione Mostra dal Segue Azione. Ora esegui la tua applicazione, vedrai che al clic di un pulsante, appare la tua seconda vista (per vedere più chiaramente aggiungi qualcosa nella tua seconda vista, in modo da poterti identificare).

Tuttavia, ora non puoi tornare alla prima visualizzazione. Per quello, abbiamoNavigation controllers.

Aggiunta di un controller di navigazione

Seleziona il tuo primo controller di visualizzazione e nella barra in alto, fai clic su Editor → Embed in → Navigation controller.

Ora, la nostra applicazione dovrebbe apparire come la seguente schermata.

Dovremmo fare in modo che ci sia una piccola riga grigio chiaro in cima alla vista. Ora, quando eseguiamo l'applicazione, possiamo vedere che c'è una barra di navigazione in cima alla vista. Quando facciamo clic sul pulsante, andremo alla seconda visualizzazione, dove vedremo un pulsante Indietro in quella barra di navigazione. Fare clic su questo e torneremo alla visualizzazione iniziale.

Aggiunta di titolo e pulsante Indietro alla barra di navigazione

Per aggiungere un titolo alla barra di navigazione, fare clic sulla barra di navigazione e vedere il relativo ispettore degli attributi. Là vedremo -

  • Title - Questo sarà il titolo della barra di navigazione, che appare al centro.

  • Prompt - Viene visualizzato nella parte superiore della barra del titolo, al centro.

  • Back Button - Qui puoi modificare il testo che appare nel pulsante Indietro.

Attualmente il pulsante che sta passando la vista si trova nella nostra vista, il che potrebbe non essere adatto se vogliamo che sullo schermo appaia qualcos'altro. Pertanto, aggiungeremo un elemento Pulsante barra nella barra di navigazione, che ci porterà alla nostra seconda vista. Tuttavia, per questo dovremmo prima eliminare l'ultimo pulsante che abbiamo aggiunto.

Aggiunta di un elemento pulsante a barra

Cerca l'elemento del pulsante della barra nella libreria degli oggetti e trascinalo sul lato destro della barra di navigazione. Chiamalo come - "Avanti>", trascina con il controllo da esso alla seconda vista, seleziona Mostra come abbiamo fatto con l'ultimo pulsante aggiunto.

Ora esegui l'applicazione, apparirà più pulita e migliore. Questo è tutto ciò che faremo con la navigazione in questo momento. Nei capitoli successivi, modificheremo la barra di navigazione utilizzando il codice Swift, quando richiesto.

Visualizzazioni tabella

Una tabella presenta i dati come un elenco di colonne singole contenente più righe, che possono essere ulteriormente suddivise in sezioni. Le tabelle dovrebbero essere utilizzate per presentare i dati in modo pulito ed efficiente.

In questa sezione, capiremo come aggiungere viste tabella, aggiungere celle prototipo, aggiungere origine dati e delegati per una vista tabella, modificare le proprietà di una tabella e impostare dati dinamici per le celle della vista tabella.

Aggiunta di una vista tabella

Per aggiungere una vista tabella, creeremo prima un nuovo progetto e lo denomineremo come - "tableView". Quindi, vai alla libreria degli oggetti e cerca Visualizza come tabella, vedremo la vista tabella, il controller della vista tabella e molte altre opzioni. Tuttavia, dovremmo selezionare la vista tabella, trascinarla e aggiungerla alla vista predefinita Controller.

Aggiunta di una cella prototipo

Allunga la visualizzazione tabella in modo che copra l'intera visualizzazione, mentre la visualizzazione tabella è evidenziata. Controlla il suo inspector degli attributi, c'è un campo chiamato Prototype cells, che è attualmente 0. Dovremmo cambiare il suo valore a 1, ora la tua vista dovrebbe apparire come segue:

Modifica dell'identificatore di cella

Ora, all'interno della tua vista, fai clic sulla cella del tuo prototipo (che è un po 'complicato). Quindi, nella struttura del documento, fai clic su Visualizza controller → Visualizza → Visualizza tabella → Cella vista tabella, e ora nel suo ispettore attributi c'è una colonna chiamata Identificatore, fai clic su quella e chiamala "Cella". Vedere le schermate seguenti per comprendere i passaggi precedenti.

Aggiunta di delegato e origine dati

Per rendere dinamiche le nostre viste tabella, abbiamo bisogno che caricino dati dinamici. Pertanto, abbiamo bisogno di un delegato e di un'origine dati per questo. Per rendere delegato e origine dati della tabella, trascina il controllo dalla visualizzazione tabella al controller della visualizzazione o il pulsante giallo nella parte superiore del controller della visualizzazione come mostrato nella schermata seguente.

Quando rilasciamo il cursore, vedremo due opzioni lì, dataSource e delegate, selezionale una per una (quando selezioni una qualsiasi opzione, il popup si nasconderà, dovrai ripetere il passaggio precedente per aggiungere una seconda opzione) . Ora dovrebbe apparire come -

Questo è tutto ciò che faremo con la nostra interfaccia utente / Main.Storyboard, in questo momento. Ora passa al file "ViewController.swift". InserisciUITableViewDelegate, UITableViewDataSource, al tuo viewController.swift come mostrato di seguito -

Tuttavia, ora Xcode mostrerà un errore in questa riga.

Questo perché ci sono un paio di metodi che dobbiamo usare UITableView

Per vedere questi metodi, Comando + fai clic su UITableViewDataSouce e copia i primi due metodi, con argomenti "numberOfRowsInSection", "cellForRowAtIndex" e incollali in ViewController.swift, prima del nostro viewDidLoad ().

Rimuovi questa riga @available(iOS 2.0, *), da entrambi i metodi e aggiungi le parentesi graffe di apertura e chiusura "{}". Ora, la vista apparirà come segue:

Xcode deve mostrare errori in entrambe le funzioni. Tuttavia, non preoccuparti perché ciò è dovuto al fatto che non abbiamo aggiunto un tipo di ritorno di tali funzioni.

numberOfRowsInSection- Questa funzione definisce il numero di righe che la nostra sezione conterrà. Quindi adesso aggiungi questa riga al tuo metodo.

return 1 //This will return only one row.

cellForRowAt - Questo metodo restituisce il contenuto per ogni cella, indexPathcontiene l'indice di ogni cella. Creeremo una cella e quindi assegneremo un valore a quella cella e infine restituiremo la cella.

Ora, le tue funzioni dovrebbero apparire come segue:

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 
}

Nella prima riga, stiamo creando una cella con lo stile predefinito e reuseIdentifier è il nome del prototipo di cella che abbiamo realizzato.

Cell.textLable?.text - Questo definisce il testo che dovrebbe apparire come titolo di quella cella.

Infine, torniamo una cella da lì. Prova a eseguire la tua applicazione ora, dovrebbe apparire come segue:

Applicazione Time Table

In questa applicazione, continueremo il nostro ultimo progetto e realizzeremo un'applicazione in cui stampiamo la tabella di 2 (2… 10…. 20).

Quindi, per creare questa applicazione, basta cambiare il file del controller di visualizzazione del progetto.

Modificare le funzioni come mostrato di seguito -

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") 
}

Ora esegui la tua applicazione. Dovrebbe apparire come mostrato di seguito.

Ora, poiché abbiamo completato le visualizzazioni tabella e creato un'applicazione, ecco una rapida sfida da risolvere.

Sfida

Crea un'applicazione, dove stampiamo la tabella di conteggio di qualsiasi numero inserito dall'utente.

Hint- Prendi l'input, aggiungi un pulsante, che se premuto caricherà la tabella con il conteggio di quel numero. Qui avremo anche bisogno della seguente funzione, che ricaricherà i dati della tabella.

tableView.reloadData()

Questa è una sfida per te poiché abbiamo trattato tutti gli argomenti su questa applicazione, quindi non forniremo una soluzione per questo.

Applicazione Egg Timer

In questa applicazione, useremo il concetto di Timer() e Class Constructor, che gestisce il tempo. Ti forniremo il concetto e la codifica. Devi creare l'interfaccia utente da solo, poiché abbiamo già discusso ogni elemento dell'interfaccia utente molte volte nei capitoli precedenti. (Anche se forniremo suggerimenti per tutto ciò che sembra abbastanza nuovo).

Il layout dell'app finale dovrebbe essere simile a questo:

Cosa succede in questa applicazione?

  • L'etichetta del titolo ha un valore iniziale 210.

  • Facendo clic sul pulsante di riproduzione, il valore dovrebbe diminuire di uno ogni secondo.

  • Al clic di pausa, il valore dovrebbe fermarsi solo lì.

  • Al clic di -10, il valore dovrebbe essere ridotto di 10 e il decremento dovrebbe continuare.

  • Al clic di +10, il valore dovrebbe essere aumentato di 10 e il decremento dovrebbe continuare.

  • Facendo clic su Ripristina, il valore dovrebbe diventare 210.

  • Il valore non dovrebbe mai essere inferiore a 0.

Concetto

  • Useremo una variabile della classe Timer () → var timer = Timer ().

  • Imposteremo un valore a questa variabile del timer che abbiamo appena creato.

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

    • timeInterval -> è l'intervallo di tempo che vogliamo utilizzare,

    • target -> è il controller della vista che dovrebbe essere effettuato,

    • selettore -> è il nome della funzione che utilizzerà questo timer,

    • userInfo -> null e si ripete, sì, vogliamo ripetere quindi sarà vero.

Invalidazione del timer

Per fermare un timer tramite la programmazione, aggiungeremo timer.invalidate() funzione.

Elements we have used -

Navigation bar - Nella barra di navigazione, abbiamo aggiunto tre elementi.

  • Elemento pulsante barra, uno a sinistra e uno a destra.
  • Titolo denominato - "Our Egg Timer".

Toolbar - Una barra degli strumenti appare nella parte inferiore della schermata di un'app e contiene pulsanti per eseguire azioni rilevanti per la visualizzazione corrente o il contenuto al suo interno.

Le barre degli strumenti sono traslucide e possono avere una tonalità di sfondo. Spesso si nascondono quando è improbabile che le persone ne abbiano bisogno.

Abbiamo aggiunto una barra degli strumenti nella parte inferiore della nostra interfaccia utente, che ha 5 elementi.

  • Tre elementi del pulsante Bar, denominati -10, Reset e +10.
  • Due spazi flessibili: spazio flessibile tra gli elementi del pulsante della barra -

Come aggiungere un'icona all'elemento del pulsante della barra?

Seleziona l'elemento del pulsante della barra. Fai clic sull'elemento del pulsante della barra, vai all'ispettore degli attributi, fai clic su Seleziona elemento e scegli l'elemento dal menu a discesa che appare.

Allo stesso modo, seleziona gli elementi per tutti gli altri pulsanti e crea un'interfaccia utente come indicato sopra. Aggiungi un'etichetta al centro della vista e collegala come presa, chiamala come -timeLeftLabel.

Azione per avviare il timer

Di seguito è riportato il programma per l'avvio del timer.

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

Crea la seguente funzione:

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

Azione per la funzione di arresto

Di seguito è riportato il programma per la funzione di arresto.

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

Azione per sottrarre tempo

Di seguito è riportato il programma per sottrarre tempo.

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

Azione per il ripristino dell'ora

Di seguito è riportato il programma per azzerare l'ora.

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

Azione per addTime

Di seguito è riportato il programma per aggiungere tempo.

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

Ora, viewController.swift dovrebbe avere il seguente aspetto:

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
   } 
}

Questo è tutto ciò che faremo nella nostra applicazione, proveremo a eseguire l'applicazione, dovrebbe funzionare bene.

Archiviazione dei dati nella memoria locale

Memorizzare i dati sulla memoria locale significa utilizzare la memoria del dispositivo locale per memorizzare i dati relativi all'applicazione sul dispositivo. Abbiamo due modi per memorizzare i dati su una memoria locale, vale a direNSUserDefault e CoreData.

Cerchiamo di capirli in dettaglio.

NSUserDefaults

NSUserDefaults ha lo scopo di memorizzare piccoli pezzi di dati come preferenze, impostazioni o valori individuali. Per utilizzare UserDefaults nella nostra applicazione, dobbiamo solo creare un riferimento a nsuserDefaults tramite il nostro codice come mostrato di seguito.

let defaultValues = NSUserDefaults.standardUserDefaults()

Per impostare i valori sui dati in UserDefaults possiamo utilizzare il codice seguente:

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)

Per ottenere valori da NSUserDefaults, possiamo utilizzare il codice seguente.

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?

CoreData

CoreData è un framework persistente, che supporta transazioni di dati di grandi dimensioni. CoreData consente di creare un modello di attributo entità relazionale per la memorizzazione dei dati utente. CoreData è un framework e può utilizzare SQLite, formati binari per memorizzare i dati.

Per utilizzare CoreData nella nostra applicazione, inizieremo con un nuovo progetto e ci assicureremo di selezionare "Use Core Data", durante la creazione del progetto.

Login Using core Data - Crea un nuovo progetto, seleziona usa CoreData come mostrato nello screenshot seguente.

Continua fino a quando il progetto è aperto, ora vediamo che il progetto ha più file dei nostri progetti precedenti.

Questa vita CoreData_demo.xcdatamodeld è il nostro database in cui creeremo la nostra tabella utente e memorizzeremo i dati.

Concept - La cosa su CoreData è che, anche se chiudiamo l'app e la apriamo dopo mesi, avrà ancora i dati che abbiamo memorizzato, che vedremo nella prossima applicazione che realizzeremo.

Ora vedremo come aggiungere dati di base e recuperare i dati di base.

Adding Core Data- Per aggiungere CoreData, fare clic sul file CoreData_demo.xcdatamodeld e poi vedremo che le entità sono vuote. Fai clic sul pulsante Aggiungi entità, aggiungerà un'entità, ora fai doppio clic sul nome dell'entità e rinominala come preferisci.

Ora fai clic sull'entità e possiamo vedere che il campo degli attributi è vuoto. Fare clic sul simbolo più e rinominare l'entità. Seleziona il tipo di entità dal campo successivo.

Abbiamo aggiunto un'entità e un attributo in essa. Ora, se andiamo alAppDelegate.swift, possiamo vedere che sono state aggiunte due nuove funzioni perché abbiamo selezionato CoreData. Le due funzioni aggiunte sono:

Note - Importa CoreData nel tuo file prima di procedere.

Saving data to Core Data - Per salvare alcuni dati in CoreData, dobbiamo creare un oggetto di AppDelegate Class.

let appDelegate = UIApplication.shared.delegate as! AppDelegate

E un oggetto di contesto

let context = appDelegate.persistentContainer.viewContext

Quindi, dobbiamo creare un oggetto entità, che chiamerà la nostra entità -

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

Ora imposteremo il valore di quell'attributo che abbiamo creato.

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

Salveremo i dati usando

context.save();

Fetching from core data- Durante il recupero, i due passaggi precedenti (creazione di appDelegate e contesto) saranno gli stessi. Quindi, creeremo una richiesta di recupero.

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

Creeremo un oggetto per memorizzare il risultato.

let results = try context.fetch(request)

Quindi esamineremo i risultati secondo il nostro requisito. Vedremo più CoreData con la prossima applicazione che creeremo.

Challenge- Prova a creare un'applicazione, in cui l'utente inserisce il nome, quindi fa clic su login e chiude l'applicazione. Quando la prossima volta che l'utente apre l'applicazione, dovrebbe essere ancora loggato. Quindi aggiungi un pulsante - logout, e se fa clic su di esso, l'applicazione chiederà di nuovo il nome utente.

Login / Logout utilizzando CoreData

Crea un progetto a vista singola chiamato 'Login', seleziona l'uso di CoreData. Fare clic su CoreData_demo.xcdatamodeld e aggiungere un'entità chiamata "Users". Al suo interno, aggiungi un attributo chiamato "nome".

Vai a main.storyboard, Aggiungi un campo di testo e un pulsante di accesso. Sotto, aggiungi un'etichetta, fai doppio clic su di essa e rimuovi il suo contenuto. Quindi, aggiungi un pulsante di disconnessione, vai al suo ispettore degli attributi e rendi 'alpha' uguale a 0. Ora, la nostra vista dovrebbe apparire come segue:

Ora vai al file del controller di visualizzazione, apri l'editor dell'assistente e crea connessioni tra gli elementi dell'interfaccia utente e il file del controller.

Note- Creeremo anche punti vendita per entrambi i pulsanti, perché dobbiamo modificare l'aspetto di quei pulsanti. Ad esempio: quando un utente è connesso, nasconderemo il pulsante di accesso, se l'utente non è connesso mostreremo il login e nasconderemo il pulsante di logout.

Poiché abbiamo già discusso sull'aggiunta e il recupero dei dati da CoreData, inseriremo il codice qui.

Try-Catch- Noterai che abbiamo usato il blocco try-catch molte volte nel codice. È perché se non usiamo i blocchi try-catch e c'è qualche eccezione o errore nel nostro programma, l'esecuzione si fermerà. Considerando che, se stiamo usando i blocchi try catch e se si verifica qualche errore, allora il blocco catch gestisce l'errore. Maggiori informazioni al riguardo nel nostro tutorial Swift

Codice per l'applicazione di accesso / disconnessione

Cerchiamo di comprendere i diversi componenti e il codice utilizzato per un'applicazione di login / logout.

Login Button Action - Il codice seguente spiega come aggiungere un'azione del pulsante di accesso.

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 - Il codice seguente spiega come aggiungere un'azione del pulsante di disconnessione.

@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() - Il codice seguente spiega come utilizzare la funzione 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") 
   } 
}

Ricorda che dovevi creare uno sbocco e un'azione, per entrambi i pulsanti.

Ora salva ed esegui l'applicazione. Accedi, chiudi l'applicazione ed eseguila di nuovo. Dovrebbe apparire come segue.

Questo è tutto ciò che faremo con CoreData. Utilizzando gli stessi concetti, possiamo costruire molte applicazioni CoreData.

Controllo della tastiera

In questa sezione impareremo a controllare il comportamento della tastiera. Ad esempio: quando si fa clic all'esterno di un campo di testo dopo aver inserito del testo, la tastiera non si chiude. Qui capiremo come controllare la tastiera.

La tastiera dovrebbe scomparire facendo clic al di fuori del campo di immissione

Questo è un compito semplice, per farlo basta incollare il codice seguente nel file viewController, prima di chiudere le parentesi graffe.

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

In questo modo, la tastiera scompare facendo clic al di fuori del campo di immissione.

La tastiera dovrebbe scomparire al tocco del tasto Invio

Per far scomparire la tastiera, dovremmo aggiungere un nuovo tipo per il nostro controller di visualizzazione. Aggiungeremo anche un campo di testo e creeremo il suo punto vendita chiamato textField. Infine, aggiungeremo il fileUITextFieldDelegate.

Lo faremo anche noi control + drag dal nostro campo di input al controller di visualizzazione e seleziona delegato dalle opzioni visualizzate.

Quindi aggiungeremo la seguente funzione.

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

Il file del controller di visualizzazione finale dovrebbe essere il seguente:

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 
   } 
}

Download di contenuti Web - Apertura di Facebook / Google

In questa sezione, impareremo come creare un'applicazione, che aprirà Facebook e Google, quando ciascun pulsante viene premuto rispettivamente. Impareremo anche il concetto di visualizzazioni Web e sicurezza a livello di trasporto delle app. Dopo questo, sarai in grado di creare un tuo browser.

Note - Abbiamo bisogno di una connessione Internet in questa applicazione.

Realizzazione di un'applicazione Web

Realizzeremo una nuova applicazione a visualizzazione singola, progetto iOS. Nella barra di ricerca della libreria degli oggetti, cercheremo la visualizzazione web, la trascineremo e la aggiungeremo al nostro controller di visualizzazione nella main.Storyboard.

Dopo aver aggiunto la visualizzazione Web, la allungheremo a tutti gli angoli. L'interfaccia utente dell'applicazione dovrebbe avere il seguente aspetto:

Apriremo il nostro main.storyboard e il controller di visualizzazione facendo clic sull'assistente editor. Creeremo una presa per la nostra webView e un'azione per entrambi i pulsanti. Al caricamento, l'applicazione caricherà yahoo in webView. Facendo clic su Google, dovrebbe caricare Google e facendo clic sul pulsante Facebook, dovrebbe caricare la pagina Facebook.

La vista finale dovrebbe essere la seguente:

I seguenti screenshot mostrano come dovrebbero apparire le diverse schermate della nostra applicazione. Se provi ad aprire un servizio Web che non è https, verrà visualizzato un errore e dovremo aggiungere un'eccezione App Transport Layer Security nel tuoinfo.plist file.