Passerer data mellom Controllers i Swift

Om Swift

Swift er et fantastisk programmeringsspråk som Apple introduserte under WWDC 2014, og nå bruker nesten alle Apple-utviklere det til å programmere iOS- og OS X-applikasjoner. Den er veldig fleksibel, enklere å bruke enn sin forgjenger Mål C, og det vil spare deg noen dyrebare minutter når du kodes med XCode.

Dette er et kraftig og intuitivt programmeringsspråk for iOS, OS X, tvOS og watchOS. Skrive Swift-koden er interaktiv og morsom, syntaksen er kortfattet, men uttrykkelig, og Swift inkluderer moderne funksjoner utviklere kjærlighet. Hvis du ikke bruker Swift allerede, kan du se noen av våre andre gode opplæringsprogrammer på Swift-språket:

Om denne opplæringen

Mesteparten av tiden, når du bygger en iOS-app med mer enn ett skjermbilde, må du sende data mellom View Controllers, slik at de kan dele innholdet uten å miste dem underveis. I denne opplæringen lærer du hvordan du gjør det. Vi vil bruke en string, en Integer, og også a UIImage, så fortsett å lese - du vil bli overrasket over hvor lett denne jobben er med Swift.

XCode Project Setup

Først av alt, opprett et nytt XCode-prosjekt. Velge Enkeltvisningsprogram og navnet på prosjektet, men du vil. Du finner en ViewController.swift fil i fillisten på panelet til venstre og et kontroller-grensesnitt i Storyboard.

Start med å dra en ny visningskontroller fra objektbiblioteket til Storyboard.

Legg inn den første kontrolleren din i en NavigationController, så når du trykker på neste kontroller, vises topplinjen som standard Tilbake knapp. Velg nå den første kontrolleren i Storyboard og klikk på Redaktør > Legge inn i ... > Navigasjonskontroller.

Legg nå til en UILabel og a UIButton til kontrolleren. Du kan finne dem i Objekt-biblioteket og dra dem inn i din første kontroller. Dobbeltklikk deretter på UILabel og skriv inn teksten du vil sende til den andre kontrolleren. Jeg har nettopp satt sin tekst til "Tekst å passere".

På den andre kontrolleren drar du en ny UILabel hvor som helst du vil og bare la teksten være slik den er.

Vi må nå opprette en ny .fort fil og legg den til vår andre kontroller. Så høyreklikk i fillistelisten til venstre, klikk Ny fil ... , å velge Cocoa Touch Class fra iOS-kilde kategori, klikk neste, og navn den nye visnings kontrolleren SecondVC. (Ingen mellomrom er tillatt i navnet, og det må starte med et stort bokstav.)

Nå må du koble den andre kontrolleren i Storyboard med den nye SecondVC.swift fil. Velg den gule sirkelen øverst på kontrolleren, klikk på Identifiser inspektør panelikonet på høyre side av XCode-vinduet, og skriv inn navnet på det nye .fort fil i Klasse og StoryboardID Enger.

Koble til visninger til .swift-filene

Del XCode-vinduet i to deler ved å klikke på Assistent redaktør knappen i øverste høyre hjørne. Nå har du Storyboard til venstre og det er relevant .fort filen på høyre side.

Koble til UILabel som en IBOutlet og UIButton som en IBAction til din .fort fil ved å holde høyre museknapp (eller Styre tast og museknapp) over disse visningene og dra den blå linjen rett under klasse erklæring.

Når du slipper musen, kan du gi et navn til etikettens uttak og til knappens handling i den lille grå popupen som vises. For knappen, sørg for å klikke på den lille kombinasjonsboksen som sier Outlet og slå den inn i Handling, fordi vi trenger det til å være en funksjon, ikke et uttak.

Når du er ferdig med å koble alle visningene, må du holde XCode-vinduet delt i to seksjoner, og velg den første kontrolleren fra Storyboard. Nå vil høyre side vise ViewController.swift fil og du vil være klar til å skrive noen kode i den.

La oss kode!

Legg følgende kode i goButton () metode.

la myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") som! SecondVC myVC.stringPassed = myLabel.text! navigationController? .pushViewController (myVC, animert: true)

Den første linjen instanserer SecondVC kontrolleren fra Storyboard. 

Den andre linjen er faktisk kjernen i denne opplæringen, fordi den tildeler mylabels tekst til UILabel vi har lagt inn i SecondVC kontrolleren. Det gjør det ved å sette en string at vi er gong å erklære senere.

Så til slutt, skyver vi bare visningen til neste kontroller.

Passerer en streng

Velg den andre kontrolleren i Storyboard og legg til denne variabelen rett under SecondVCklassedeklarasjon:

var stringPassed = ""

Gjør appen tilordne verdien av denne variabelen til secondLabel med følgende linje av kode i viewDidLoad () metode.

secondLabel.text = stringPassed

Du er ferdig! Kjør appen på iOS-simulatoren eller en ekte enhet, trykk GÅ! og du bør få noe slikt:

Som du kan se, er Tekst å passere string har blitt bestått til vår SecondVC kontrolleren.

Passerer en helhet

La oss nå prøve å legge til en helhet (int i Swift) og dele det mellom de to kontrollerne. 

Legg til følgende variabel i ViewController.swift, rett under mylabel Outlets erklæring.

var myInt = Int ()

Initialiser verdien sin i viewDidLoad ():

overstyr func viewDidLoad () super.viewDidLoad () myInt = 5

Deretter redigerer du goButton () funksjon ved å legge til en forekomst som også vil passere våre Myint verdi til neste kontroller, som følger:

la myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") som! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt navigationController? .pushViewController (myVC, animert: true)

Gå nå inn SecondVC.swift og legg først til en variabel av typen int Det vil få nummeret vi sender fra den første kontrolleren. Legg denne linjen med kode rett under stringPassed variabel.

var intPassed = Int ()

Rediger secondLabel linje med kode som følger:

secondLabel.text = stringPassed + "min Int: \ (intPassed)"

Det er alt. Kjør appen igjen og trykk på GÅ! knappen, og du bør få noe slikt:

Så nå ser du hvor lett det er å passere variabler fra en kontroller til en annen. Det siste jeg vil vise deg, er hvordan du skal passere et bilde.

Passerer et bilde

Deretter må vi legge til et bilde i Eiendelermappe i XCode, a UIImageView i begge kontrollerne og deres relative variabler av typen UIImage.

Tast inn Assets.xcassets blå mappe og opprett en ny Bildesett.

Dra 3x, 2x og 1x bildene i sine relative bokser. Du er fri til å bruke et hvilket som helst bilde. Jeg har brukt en Apple-logo som et eksempel.

Gå tilbake til den første kontrolleren i Storyboard og dra a UIImageView hvor som helst i den. Fest bildet ditt til det ved hjelp av Attributtsinspektørpanelet og sett det Modus til Aspect Fit.

Dra nå en ny UIImageView inn i den andre kontrolleren og sett dens Modus til Aspect Fit. Ikke tilordne noe bilde til det, fordi vi vil passere bildet fra den første kontrolleren!

Høyreklikk på musen (eller hold nede Styre og klikk på museknappen) og dra en blå linje inn i den første kontrolleren .fort fil for å erklære din UIImageView som en IBOutlet. Gjør det samme også på den andre kontrolleren.

Nå må du legge til en UIImage variabel til SecondVC.swift fil. Plasser den under intPassed variabel.

var theImagePassed = UIImage ()

viewDidLoad (), Ta tak i bildet passert av den første kontrolleren og vis den med imagePassed.

imagePassed.image = theImagePassed

Endelig rediger du goButton () metode ved å legge til en linje med kode som vil passere bildet av den første kontrolleren inn i UIImageView av den andre. Den fulle goButton () Metoden er nå som følger.

la myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") som! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt myVC.theImagePassed = myImage.image! navigationController? .pushViewController (myVC, animert: true)

Kjør appen, trykk på GÅ! knappen igjen, og du bør se noe slikt:

Takk for at du følger med! Jeg håper du er overrasket over hvor lett det er å bytte ut variabler og bilder mellom to kontrollere. 

Lær Swift

Vi har bygget en komplett guide for å hjelpe deg med å lære Swift, enten du er bare i gang med det grunnleggende eller du vil utforske mer avanserte emner.

Du kan også sjekke ut noen av våre andre opplæringsprogrammer på Xcode og Swift!