I den forrige leksjonen opprettet du et enkelt Swift-prosjekt i Xcode, et grunnleggende oppgaveprogram. I denne delen av Swift From Scratch skal vi legge til muligheten til å lage oppgaver. Underveis lærer du om handlinger, delegering og egenskaper.
Hvis du vil følge med meg, så sørg for at du har Xcode 8.3.2 eller høyere installert på maskinen din. Du kan laste ned Xcode 8.3.2 fra Apples App Store.
Ved slutten av denne leksjonen vil brukeren kunne legge til nye gjøremål ved å trykke på en knapp i navigasjonsfeltet, presentere en visning med et tekstfelt og en knapp. La oss begynne med å opprette visningskontrolleren som vil håndtere å legge til nye ting å gjøre, den AddItemViewController
klasse.
AddItemViewController
Velge Ny> Fil ... fra Xcode er Fil menyen og velg Cocoa Touch Class mal fra listen over iOS> Kilde maler.
Gi klassen navn AddItemViewController
og sørg for at den arver fra UIViewController
. Dobbeltklikk det Språk er satt til Fort og det Lag også XIB-fil er ukontrollert.
Fortell Xcode hvor du vil lagre filen for AddItemViewController
klasse og klikk Skape.
Før vi oppretter brukergrensesnittet til AddItemViewController
klasse, må vi opprette et uttak for tekstfeltet og to handlinger, en for avbryt-knapp i navigeringslinjen og en annen for opprett-knappen under tekstfeltet.
Å legge til et stikkontakt bør være kjent nå. Lag et uttak i AddItemViewController
klasse og navn den tekstfelt
som vist under.
klasse AddItemViewController: UIViewController @IBOutlet var textField: UITextField! overstyr func viewDidLoad () super.viewDidLoad () overstyre func didReceiveMemoryWarning () super.didReceiveMemoryWarning ()
Å lage en handling ligner veldig på å opprette en instansmetode. Faktisk er det @IBAction
Attributt er ikke noe mer enn et hint for Interface Builder. Ved å prefikse en metode med @IBAction
Attributt, vi sørger for at Interface Builder er oppmerksom på metoden, som gjør at vi kan koble den til storyboard. Vi vil forlate kroppene til begge handlingene tom for nå.
klasse AddItemViewController: UIViewController @IBOutlet var textField: UITextField! overstyr func viewDidLoad () super.viewDidLoad () overstyr func didReceiveMemoryWarning () super.didReceiveMemoryWarning () @IBAction func avbryte (_ sender: Any) @IBAction func create (_ sender: Any)
Åpen Main.storyboard i Prosjektnavigator og dra a Vis kontrolleren fra Objektbibliotek til høyre. Når visningskontrollen er valgt, åpner du Identitetsinspektør til høyre og sett Tilpasset klasse> Klasse til AddItemViewController.
Hvis du vil legge til en navigeringslinje i tilleggsvisningsvisningen, velger du Legg til produkt View Controller og velg Integrer inn> Navigasjons kontroller fra Redaktør Meny. Dette vil gjøre Legg til produkt View Controller rotasjonsvisningskontrollen til en navigasjonsregulator.
Det neste trinnet er å legge til et strekkknappelement i navigasjonslinjen til Vis kontrolleren-ikke Legg til produkt View Controller-og sett dens Identifier til Legg til i Attributtsinspektør.
Når brukeren tapper på Legg til knappen, den Legg til produkt View Controller bør presenteres modelt. For å oppnå dette, trykk på Styre tast og dra fra Legg til knappen til Navigasjonskontroller, velge Present Modally fra menyen som dukker opp. Dette vil skape en segue fra Legg til produkt View Controller til den nye Navigasjonskontroller.
Dra et tekstfelt og en knapp fra Objektbibliotek og legg dem til Legg til produkt View Controller scene. Velg Legg til produkt View Controller og koble til tekstfelt
uttak med tekstfelt og skape(_:)
handling med knappen. De skape(_:)
handling bør utløses når Berør på innsiden hendelsen er sparken. Endre tittel på knappen til Skape og legg til de nødvendige layoutbegrensningene til tekstfeltet og -knappen.
For å fullføre brukergrensesnittet, legg til et barknappelement øverst til venstre i navigasjonslinjen til Legg til produkt View Controller og sett dens Identifier til Avbryt. Med Legg til produkt View Controller valgt, åpne Tilkoblingsinspektør og koble til Avbryt(_:)
handling til Avbryt knapp.
Bygg og kjør programmet ved å trykke Kommando-R for å bekrefte at alt er tilkoblet riktig.
Når brukeren tapper på Skape knappen for å legge til en gjøremål, må visningselementkontrollen legge til visningskontrolleren. Delegasjon er en perfekt løsning for dette scenariet. Prosessen er ganske enkel.
Vi lager en delegatprotokoll ViewController
klassen overholder. Når AddItemViewController
forekomst er opprettet - når brukeren tapper Legg til button-den ViewController
objektet er angitt som delegat av AddItemViewController
eksempel, slik at den sistnevnte kan varsle ViewController
eksempel når et nytt oppgaveelement opprettes. La oss slå det ned for å bedre forstå denne prosessen.
AddItemViewControllerDelegate
protokollÅpen AddItemViewController.swift og erklærer AddItemViewControllerDelegate
protokoll under import uttalelsen øverst. Protokolldeklarasjonen ligner en klassedeklarasjon. De protokollen
Søkeordet etterfølges av navnet på protokollen.
importere UIKit-protokollen AddItemViewControllerDelegate func controller (_ kontroller: AddItemViewController, didAddItem: String)
Konseptet ligner veldig protokoller i Objective-C. Navnet på protokollen er AddItemViewControllerDelegate og det definerer en metode, kontroller (_: didAddItem :)
.
delegat
EiendomObjektet som trenger å implementere delegatprotokollen er delegat av AddItemViewController
. Vi må først opprette en eiendom for delegaten som vist i utdragsboken nedenfor.
klasse AddItemViewController: UIViewController @IBOutlet var textField: UITextField! var delegert: AddItemViewControllerDelegate? ...
De delegat
Eiendommen er av typen AddItemViewControllerDelegate?
, en valgfri type, siden vi ikke kan være sikre på at delegat
Eiendommen er ikke nil
. Merk at navnet på protokollen ikke er pakket inn i vinkelbeslag som i mål-C.
Delegemetoden, kontroller (_: didAddItem :)
, vil bli påkalt i skape(_:)
handling som vist nedenfor. For å holde eksemplet enkelt, gjør vi ingen validering på brukerens innspill.
Vi bruker valgfri kjetting for å påkalle delegatemetoden på delegatobjektet, som betyr at delegatemetoden kun påberopes dersom delegat
eiendommen er satt. Verdien av tekstfeltet lagres midlertidig i en konstant, punkt
.
@IBAction func create (_ sender: Any) hvis la element = textField.text delegere? .Controller (selv, gjordeAddItem: element)
Gjennomføringen av Avbryt(_:)
handlingen er lett. Alt vi gjør er å avvise AddItemViewController
forekomst.
@IBAction func avbryte (_ sender: Enhver) avvis (animert: true)
Det er et stykke av puslespillet mangler skjønt. De delegat
eiendom av AddItemViewController
forekomst er ikke satt for øyeblikket. Vi kan løse dette ved å implementere forberede (for avsender- :)
metode i ViewController
klasse. Først må vi imidlertid gå tilbake til storyboardet.
Åpen Main.storyboard og velg segue som forbinder Legg til knapp med Navigasjonskontroller. Åpne Attributtsinspektør og sett segue s Identifier tilAddItemViewController.
Deretter implementerer du forberede (for avsender- :)
metode i ViewController
klassen som vist nedenfor. Legg merke til overstyring
søkeord prefiks metoden. Dette burde være kjent nå.
overstyre func forberedelse (for segue: UIStoryboardSegue, sender: Any?) if segue.identifier == "AddItemViewController" la navigationController = segue.destination as? UINavigationController la addItemViewController = navigationController? .TopViewController som? AddItemViewController hvis la viewController = addItemViewController viewController.delegate = self
Vi begynner med å sjekke identifikatoren for fortellingen, og sørger for at vi forbereder oss på riktig segue. Deretter spør vi segue for bestemmelsesvisningskontrollen. Du kan forvente at dette skal være AddItemViewController
eksempel, men husk at vi gjorde visningskontrolleren rotasjonsvisningskontrollen til en navigasjonsregulator. Dette betyr at vi må spørre navigasjonskontrolleren, segueens bestemmelsesvisningskontroller, for toppvisningskontrollen.
De addItemViewController
Konstant er av typen AddItemViewController?
på grunn av bruken av som?
søkeord. Med andre ord, ved å bruke som?
vi nedslått verdien av topViewController
eiendom til en valgfri type.
I hvis
uttalelse, pakker vi ut de valgfrie og angir delegat
eiendom til ViewController
forekomst.
Jeg er sikker på at du har lagt merke til bruken av flere alternativ i implementeringen av forberede (for avsender- :)
metode. Når du samhandler med Objective-C APIer, er det alltid bedre å spille det trygt. Mens du sender meldinger til nil
er helt fint i Mål-C, det er ikke i Swift. På grunn av denne viktige forskjellen, må du alltid være forsiktig når du samhandler med Objective-C APIs i Swift. Eksemplet ovenfor illustrerer denne brønnen.
AddItemViewControllerDelegate
protokollGjennomføring av AddItemViewControllerDelegate
protokollen ligner på implementeringen av UITableViewDataSource
protokoll. Vi begynner med å tilpasse ViewController
klassen til protokollen som vist nedenfor.
klasse ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AddItemViewControllerDelegate ...
Deretter implementerer vi metodene til AddItemViewControllerDelegate
protokoll, som koker ned til å implementere kontroller (_: didAddItem :)
metode. Vi legger til det nye elementet i visningsregulatorens elementer
Egenskap, Oppdater tabellvisningen, og avvis Add-visnings-kontrolleren.
// MARK: Legg til element View Controller Delegate Methods func controller (_ kontroller: AddItemViewController, didAddItem: String) // Oppdater datakilde items.append (didAddItem) // Oppdater tabellvisning tableView.reloadData () // Avvis Legg til produktvisning Kontroller avviser (animert: sant)
Bygg og kjør programmet for å teste om du kan legge til nye elementer på oppgavelisten. Vi validerer for øyeblikket ikke brukerens innspill. Som en øvelse, vis et varselvisning til brukeren hvis de klikker på Skape knappen og tekstfeltet er tomt. Å legge til en tom å gjøre er ikke veldig nyttig. Ikke sant?
I denne leksjonen lærte du å deklarere og implementere en egendefinert protokoll. Du lærte også å lage handlinger og koble dem opp i Interface Builder. I den neste leksjonen skal vi fullføre vårt gjøremålsprogram ved å legge til muligheten til å slette gjøremål, og vi vil også forbedre programmets brukeropplevelse..
I mellomtiden kan du sjekke ut noen av våre andre kurs og opplæringsprogrammer om swift språk iOS-utvikling!