2014-09-01 18 views
16

Uso Swift e Xcode 6 e desidero passare una variabile da un controller di visualizzazione a un altro utilizzando un segmento.Passaggio di variabili tra controller di vista utilizzando un seguito

Ho creato un seguito chiamato 'MainToTimer' che viene attivato una volta premuto il pulsante. Mi piacerebbe essere in grado di utilizzare la variabile chiamata "Durata" sul secondo controller di visualizzazione.

È possibile passare più variabili e costanti?

Quale codice è necessario associato a ciascun controller di visualizzazione?

Grazie in anticipo.

+1

possibile duplicato di [Come si passano i dati tra i controller di visualizzazione in Swift?] (Http://stackoverflow.com/questions/25215476/how-do-you-pass-data-between-view-controllers-in- rapido) – Paulw11

risposta

6

In primo luogo ViewController questo (per segue modale):

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let theDestination = (segue.destinationViewController as ViewController2) 
    theDestination.Duration2 = Duration 
} 

Modifica ViewController2 al nome del secondo ViewController. In ViewController2 creare una variabile di classe:

var Duration2 = (whatever the type - UInt8 I guess for time) 

Questo è tutto. Avrai il valore di Duration2 il valore di Duration dal primo ViewController.

+0

Grazie per il tuo commento. Ho provato ad incorporare il tuo suggerimento e ho ricevuto un errore. (1) in linea self.performSegueWithIdentifier ("MainToTimer", durata del mittente) Ricevo un errore che dice che Type "Duration" non è conforme al protocollo "Any Object" (2) in linea theDestination.Duration2 = Duration I receive a error - Expected nome del membro o chiamata del costruttore dopo il nome del tipo. – DanteDeveloper

+0

Ci scusiamo per la risposta tardiva. La versione successiva di Xcode 6 ha cambiato il metodo. L'ho aggiornato sopra e dovrebbe funzionare bene ora. –

+0

'if (follows.identifier =" MainToTimer ") {' deve essere 'if (segue.identificatore ==" MainToTimer ") {' ur confronto, non assegnando –

38

Prima di tutto, impostare proprietà/proprietà per contenere le variabili nel secondo controller di visualizzazione (destinazione).

class YourSecondViewController: UIViewController { 
    var duration:Double? 
} 

Quindi il tuo pulsante attiva il tuo passaggio personalizzato. Usa la tua variabile ('duration') come argomento per il mittente.

class YourFirstViewController: UIViewController { 
    @IBAction func buttonTapped(sender: AnyObject) { 
     self.performSegueWithIdentifier("MainToTimer", sender: duration) 
    } 
} 

Infine, passare questo dati del mittente sovrascrivendo il metodo prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "MainToTimer") { 
     let secondViewController = segue.destinationViewController as YourSecondViewController 
     let duration = sender as Double 
     secondViewController.duration = duration 
    } 
} 

Sì, è anche possibile passare più variabili e costanti, sempre utilizzando il parametro 'mittente' di prepareForSegue. Se si dispone di più dati che si desidera passare, inserirli in una matrice e rendere tale matrice al mittente.

+1

OK ... Vedo come funziona .. Potrei anche usarlo ... ma ho un brutto presentimento dato che questo non è proprio ciò per cui è stato progettato l'argomento del mittente. Di solito scopro più tardi perché non dovresti farlo, ma non riesco a pensare a niente adesso. – wcochran

Problemi correlati