Passaggio dei dati tra i controller in Swift

Informazioni su Swift

Swift è un fantastico linguaggio di programmazione introdotto da Apple durante il WWDC 2014, e ora quasi tutti gli sviluppatori Apple lo stanno utilizzando per programmare applicazioni iOS e OS X. È molto flessibile, più facile da usare rispetto al suo predecessore Objective C e ti farà risparmiare alcuni minuti preziosi durante la codifica con XCode.

Questo è un linguaggio di programmazione potente e intuitivo per iOS, OS X, tvOS e watchOS. Scrivere codice Swift è interattivo e divertente, la sintassi è concisa ma espressiva e Swift include le caratteristiche moderne che gli sviluppatori amano. Se non stai già utilizzando Swift, dai un'occhiata ad alcuni dei nostri fantastici tutorial sulla lingua Swift:

Informazioni su questo tutorial

La maggior parte delle volte, quando si crea un'app per iOS con più di uno schermo, è necessario passare i dati tra i View Controller in modo che possano condividere i contenuti senza perderli lungo la strada. In questo tutorial, imparerai come farlo. Useremo a Stringa, un Numero intero, e anche a UIImage, quindi continua a leggere - rimarrai stupito di quanto sia facile questo lavoro con Swift.

L'installazione del progetto XCode

Prima di tutto, crea un nuovo progetto XCode. Scegliere Applicazione vista singola e dai il nome al progetto come preferisci. Troverete a ViewController.swift file nell'elenco dei file sul pannello di sinistra e un'interfaccia controller nello Storyboard.

Inizia trascinando un nuovo controller di visualizzazione dalla libreria degli oggetti nello storyboard.

Incorpora il tuo primo controller in a navigationController, così quando si preme al controller successivo la barra in alto mostrerà un valore predefinito Indietro pulsante. Ora seleziona il primo controller in Storyboard e fai clic su editore > Incorporare in ... > Controller di navigazione.

Ora aggiungi un UILabel e a UIButton al controller. Puoi trovarli nella libreria degli oggetti e trascinarli nel tuo primo controller. Quindi fare doppio clic sul UILabel e digitare il testo che si desidera passare al secondo controller. Ho appena impostato il suo testo su "Testo da passare".

Sul secondo controller, trascina un nuovo UILabel ovunque tu voglia e lascia semplicemente il testo così com'è.

Ora dobbiamo creare un nuovo .veloce file e collegalo al nostro secondo controller. Quindi, fai clic con il pulsante destro del mouse sul pannello dell'elenco dei file a sinistra, quindi fai clic su Nuovo file… , selezionare Cocoa Touch Class dal Fonte iOS categoria, fare clic Il prossimo, e nominare il nuovo controller di visualizzazione SecondVC. (Nel nome non sono consentiti spazi e deve iniziare con una lettera maiuscola.)

Ora devi collegare il secondo controller in Storyboard con il tuo nuovo SecondVC.swift file. Selezionare il cerchio giallo nella parte superiore del controller, fare clic su Identificare l'ispettore icona del pannello sul lato destro della finestra XCode e digitare il nome del nuovo .veloce file nel Classe e StoryboardID i campi.

Collegamento di viste ai file .swift

Dividi la finestra XCode in due parti facendo clic sul Assistente editore pulsante nell'angolo in alto a destra. Ora avrai lo Storyboard a sinistra e relativo .veloce file sul lato destro.

Connetti il UILabel come un IBOutlet e il UIButton come un IBAction alla tua .veloce file tenendo premuto il tasto destro del mouse (o il tasto Controllo tasto e il tasto del mouse) su quelle viste e trascinando la linea blu proprio sotto il classe dichiarazione.

Quando rilasci il mouse, puoi dare un nome allo sbocco dell'etichetta e all'azione del pulsante nel piccolo popup grigio che compare. Per il pulsante, assicurati di fare clic sulla piccola casella combinata che dice Presa e accenderlo Azione, perché abbiamo bisogno che sia una funzione, non uno sbocco.

Una volta terminato il collegamento di tutte le viste, mantieni la finestra XCode divisa in due sezioni e seleziona il primo controller dallo Storyboard. Ora il lato destro mostrerà il ViewController.swift file e sarai pronto a scrivere del codice.

Facciamo codice!

Inserire il seguente codice nel goButton () metodo.

consenti a myVC = storyboard? .standardreViewControllerWithIdentifier ("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! navigationController? .pushViewController (myVC, animated: true)

La prima riga crea un'istanza di SecondVC controller dallo Storyboard. 

La seconda linea è in realtà il nucleo di questo tutorial, perché assegna il myLabelIl testo di UILabel abbiamo inserito nel SecondVC controller. Lo fa impostando a Stringa che dobbiamo gong dichiarare dopo.

Quindi, finalmente, spostiamo semplicemente la vista sul prossimo controller.

Passando una stringa

Ora seleziona l'altro controller nello Storyboard e aggiungi questa variabile subito sotto SecondVCdichiarazione di classe:

var stringPassed = ""

Fai in modo che l'app assegni il valore di questa variabile a secondLabel con la seguente riga di codice nel viewDidLoad () metodo.

secondLabel.text = stringPassed

Hai finito! Esegui l'app su iOS Simulator o su un dispositivo reale, tocca PARTIRE! e dovresti ottenere qualcosa di simile a questo:

Come puoi vedere, il Testo da passare Stringa è stato passato con successo al nostro SecondVC controllore.

Passando un intero

Ora proviamo ad aggiungere un intero (Int in Swift) e condividilo tra i due controller. 

Aggiungi la seguente variabile al ViewController.swift, proprio sotto il myLabel Dichiarazione dello sbocco.

var myInt = Int ()

Inizializza il suo valore in viewDidLoad ():

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

Quindi, modifica il goButton () funzione aggiungendo un'istanza che supererà anche il nostro myInt valore al controller successivo, come segue:

consenti a myVC = storyboard? .standardreViewControllerWithIdentifier ("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt navigationController? .pushViewController (myVC, animated: true)

Adesso vai SecondVC.swift e prima aggiungi una variabile di tipo Int otterrà il numero che invieremo dal primo controller. Inserisci questa riga di codice proprio sotto il stringPassed variabile.

var intPassed = Int ()

Modifica il secondLabel linea di codice come segue:

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

È tutto. Esegui nuovamente l'app e tocca il PARTIRE! pulsante, e dovresti ottenere qualcosa di simile a questo:

Quindi ora vedi quanto è facile passare le variabili da un controller a un altro. L'ultima cosa che vorrei mostrarti è come passare un'immagine.

Passando un'immagine

Successivamente abbiamo bisogno di aggiungere un'immagine nel Risorsecartella in XCode, a UIImageView in entrambi i controller e le relative variabili relative di tipo UIImage.

Inserisci il Assets.xcassets cartella blu e creare un nuovo Set di immagini.

Trascina le immagini 3x, 2x e 1x nelle relative caselle. Sei libero di usare qualsiasi immagine. Ho usato un logo Apple come esempio.

Torna al primo controller in Storyboard e trascina un UIImageView ovunque. Allega l'immagine ad essa usando il pannello di controllo Attributi e impostane la sua Modalità a Vestibilità.

Ora trascina un nuovo UIImageView nel secondo controller e impostalo Modalità a Vestibilità. Non assegnare alcuna immagine ad esso, però, perché passeremo l'immagine dal primo controller!

Fai clic con il pulsante destro del mouse (o tieni premuto Controllo e fare clic con il pulsante del mouse) e trascinare una linea blu nel primo controller .veloce file per dichiarare il tuo UIImageView come un IBOutlet. Fai la stessa cosa anche sul secondo controller.

Ora devi aggiungere un UIImage variabile al SecondVC.swift file. Mettilo sotto il intPassed variabile.

var theImagePassed = UIImage ()

Nel viewDidLoad (), catturare l'immagine passata dal primo controller e visualizzarla imagePassed.

imagePassed.image = theImagePassed

Infine, modifica il file goButton () metodo aggiungendo una linea di codice che passerà l'immagine del primo controller nel UIImageView del secondo. Il pieno goButton () il metodo è ora come segue.

consenti a myVC = storyboard? .standardreViewControllerWithIdentifier ("SecondVC") as! SecondVC myVC.stringPassed = myLabel.text! myVC.intPassed = myInt myVC.theImagePassed = myImage.image! navigationController? .pushViewController (myVC, animated: true)

Esegui l'app, tocca il PARTIRE! di nuovo, e dovresti vedere qualcosa di simile a questo:

Grazie per aver seguito! Spero che tu sia sorpreso da quanto sia facile scambiare variabili e immagini tra due controller. 

Impara Swift

Abbiamo creato una guida completa per aiutarti a imparare Swift, sia che tu stia appena iniziando con le basi o che desideri esplorare argomenti più avanzati.

Puoi anche consultare alcuni dei nostri altri tutorial su Xcode e Swift!