Gegevens tussen controllers in Swift doorgeven

Over Swift

Swift is een geweldige programmeertaal die Apple introduceerde tijdens WWDC 2014, en nu gebruiken bijna alle Apple-ontwikkelaars het om iOS- en OS X-applicaties te programmeren. Het is zeer flexibel, gemakkelijker te gebruiken dan zijn voorganger Objectief C en het bespaart u kostbare minuten bij het coderen met XCode.

Dit is een krachtige en intuïtieve programmeertaal voor iOS, OS X, tvOS en watchOS. Het schrijven van Swift-code is interactief en leuk, de syntaxis is beknopt maar toch expressief en Swift bevat moderne functies waar ontwikkelaars van houden. Als je Swift al niet gebruikt, bekijk dan eens enkele van onze andere geweldige tutorials over de Swift-taal:

Over deze les

Meestal, wanneer u een iOS-app met meer dan één scherm maakt, moet u gegevens doorgeven tussen uw View Controllers zodat ze inhoud kunnen delen zonder ze onderweg kwijt te raken. In deze tutorial leer je hoe je dat moet doen. We zullen een gebruiken Draad, een Geheel getal, en ook een UIImage, dus blijf lezen - u zult versteld staan ​​hoe gemakkelijk deze taak bij Swift is.

De XCode-projectinstellingen

Maak eerst een nieuw XCode-project. Kiezen Toepassing enkele weergave en noem het project zoals je maar wilt. U zult een vinden ViewController.swift bestand in de bestandenlijst op het linkerpaneel en een controllerinterface in het storyboard.

Begin door een nieuwe View Controller vanuit de Objectbibliotheek naar je Storyboard te slepen.

Sluit je eerste controller in een NavigationController, dus wanneer u naar de volgende controller duwt, geeft de bovenste balk een standaard weer Terug knop. Selecteer nu de eerste controller in Storyboard en klik op Editor > Insluiten in ... > Navigatiecontroller.

Voeg nu een toe UILabel en een UIButton naar de controller. Je kunt ze vinden in de Objectbibliotheek en ze naar je eerste controller slepen. Dubbelklik vervolgens op de UILabel en typ de tekst die u wilt doorgeven aan de tweede controller. Ik heb zojuist zijn tekst ingesteld op "Tekst om door te geven".

Sleep op de tweede controller een nieuwe UILabel waar je maar wilt en laat de tekst gewoon zoals hij is.

We moeten nu een nieuw maken .snel bestand en bevestig het aan onze tweede controller. Dus klik met de rechtermuisknop in het lijstvenster met bestanden aan de linkerkant, klik Nieuw bestand… , kiezen Cocoa Touch Class van de iOS-bron categorie, klik volgende, en benoem de nieuwe view controller SecondVC. (Spaties zijn niet toegestaan ​​in de naam en deze moet beginnen met een hoofdletter.)

Nu moet je de tweede Controller in Storyboard koppelen aan je nieuwe SecondVC.swift het dossier. Selecteer de gele cirkel boven aan de controller, klik op de Identificeer inspecteur paneelpictogram aan de rechterkant van het XCode-venster en typ de naam van uw nieuwe .snel bestand in de Klasse en StoryboardID velden.

Aanzichten verbinden met de .swift-bestanden

Splits het XCode-venster in twee delen door op de te klikken Assistent redacteur knop in de rechterbovenhoek. Nu heb je het Storyboard aan de linkerkant en het is relevant .snel bestand aan de rechterkant.

Verbind de UILabel als een IBOutlet en de UIButton als een IBAction aan jouw .snel bestand door de rechtermuisknop ingedrukt te houden (of de Controle toets en muisknop) over die aanzichten en de blauwe lijn rechtsonder de slepen klasse verklaring.

Als je de muis loslaat, kun je de uitlaat van het label een naam geven en de actie van de knop in de kleine grijze pop-up die verschijnt. Klik voor de knop op de kleine keuzelijst met invoervak ​​die zegt stopcontact en schakel het in Actie, omdat we het nodig hebben om een ​​functie te zijn, geen uitlaatklep.

Als je klaar bent met het verbinden van alle views, houd je je XCode-venster opgesplitst in twee secties en selecteer je de eerste controller van het Storyboard. Nu zal de rechterkant het ViewController.swift bestand en je bent klaar om er een code in te schrijven.

Laten we Code!

Plaats de volgende code in de goButton () methode.

laat myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") als! SecondVC myVC.stringPassed = myLabel.text! navigationController? .pushViewController (myVC, geanimeerd: true)

De eerste regel duidt de SecondVC controller van het storyboard. 

De tweede regel is eigenlijk de kern van deze tutorial, omdat deze de mylabel's tekst naar de UILabel we hebben in de SecondVC controller. Het doet dat door een Draad dat we later zullen verklaren.

Dan tenslotte, we duwen gewoon het zicht naar de volgende controller.

Een reeks passeren

Selecteer nu de andere controller in Storyboard en voeg deze variabele direct onder de SecondVCklasse verklaring:

var stringPassed = ""

Laat de app de waarde van deze variabele toewijzen aan secondLabel met de volgende regel code in de viewDidLoad () methode.

secondLabel.text = stringPassed

U bent klaar! Voer de app uit op de iOS Simulator of op een echt apparaat, tik op GAAN! en je zou iets als dit moeten krijgen:

Zoals u kunt zien, de Tekst om door te geven Draad is met succes doorgegeven aan ons SecondVC controleur.

Een geheel getal doorgeven

Laten we nu proberen een geheel getal (Int in Swift) en deel het tussen de twee controllers. 

Voeg de volgende variabele toe aan de ViewController.swift, direct onder de mylabel Verklaring van Outlet.

var myInt = Int ()

Initialiseer de waarde in viewDidLoad ():

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

Bewerk vervolgens de goButton () functie door een exemplaar toe te voegen dat ook door ons wordt gehaald myInt waarde voor de volgende controller, als volgt:

laat myVC = storyboard? .instantiateViewControllerWithIdentifier ("SecondVC") als! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt navigationController? .pushViewController (myVC, geanimeerd: true)

Ga nu naar binnen SecondVC.swift en voeg eerst een variabele van het type toe Int die het nummer krijgt dat we van de eerste controller sturen. Plaats deze regel code direct onder de stringPassed veranderlijk.

var intPassed = Int ()

Bewerk de secondLabel regel code als volgt:

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

Dat is alles. Start de app opnieuw en tik op de GAAN! knop, en je zou iets als dit moeten krijgen:

Dus nu zie je hoe eenvoudig het is om variabelen van de ene controller naar de andere te sturen. Het laatste dat ik je wil laten zien, is hoe je een afbeelding kunt doorgeven.

Een afbeelding doorgeven

Vervolgens moeten we een afbeelding toevoegen aan de Middelenmap in XCode, a UIImageView in beide controllers en hun relatieve variabelen van het type UIImage.

Ga naar Assets.xcassets blauwe map en maak een nieuwe Afbeelding instellen.

Versleep de 3x, 2x en 1x afbeeldingen naar hun relatieve vakken. Je bent vrij om elke afbeelding te gebruiken. Ik heb een Apple-logo gebruikt als voorbeeld.

Ga terug naar de eerste controller in Storyboard en sleep een UIImageView overal in het. Voeg uw afbeelding eraan toe met behulp van het inspectiepaneel Kenmerken en stel deze in mode naar Aspect Fit.

Sleep nu een nieuw UIImageView in de tweede controller en stel deze in mode naar Aspect Fit. Wijs er echter geen afbeelding aan toe, omdat we de afbeelding van de eerste controller doorgeven!

Klik met de rechtermuisknop op de muis (of houd ingedrukt Controle en klik op de muisknop) en sleep een blauwe lijn naar de eerste controller .snel bestand om uw te declareren UIImageView als een IBOutlet. Doe hetzelfde ook op de tweede controller.

Nu moet je een toevoegen UIImage variabele voor de SecondVC.swift het dossier. Plaats het onder de intPassed veranderlijk.

var theImagePassed = UIImage ()

In viewDidLoad (), pak het beeld dat door de eerste controller is gepasseerd en geef het weer imagePassed.

imagePassed.image = theImagePassed

Bewerk tenslotte de goButton () methode door een regel code toe te voegen die de afbeelding van de eerste controller doorgeeft aan de UIImageView van de tweede. De volledige goButton () methode is nu als volgt.

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

Voer de app uit, tik op de GAAN! knop opnieuw, en je zou zoiets als dit moeten zien:

Bedankt voor het volgende! Ik hoop dat je verbaasd bent over hoe gemakkelijk het is om variabelen en afbeeldingen uit te wisselen tussen twee controllers. 

Leer Swift

We hebben een complete gids samengesteld om je te helpen snel te leren, of je nu net begint met de basis of als je meer geavanceerde onderwerpen wilt verkennen.

Je kunt ook enkele van onze andere tutorials bekijken over Xcode en Swift!