2015-11-22 13 views
12

Quello che voglio ottenere: premeaccesso proprietà secondarie vista contenitore veloci

utente il pulsante nella ViewController poi, il colore del pulsante posto nella vista contenitore deve cambiare il suo colore in rosso.

Come posso ottenere l'accesso del pulsante posizionato nella vista Contenitore, da ViewController?

enter image description here

risposta

23

Passo dopo passo:

  1. Nome della segue tra il controller della vista e la vista del contenitore di controllo.
  2. Aggiungi una proprietà al controller della vista che conterrà il controller della vista del contenitore.
  3. Nella vista controller implementare un metodo prepareForSegue(_:sender:).
  4. Nel metodo di controllo se segue.identifier uguale l'identificatore specificato nel passaggio 1.
  5. Se fosse vero, quindi salvare il segue.destinationViewController alla vostra proprietà dal punto 2.
  6. Ora avete il controller della vista container memorizzati nella vostra proprietà in modo puoi personalizzare la tua classe. Dovresti avere il controller di visualizzazione già memorizzato nel metodo viewDidLoad().

Esempio:

var containerViewController: YourContainerViewControllerClass? 
let containerSegueName = "testSegue" 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == containerSegueName { 
     containerViewController = segue.destinationViewController as? YourContainerViewControllerClass 
    } 
} 
+0

Grazie mille per la tua risposta dettagliata, ma dove posso dire di modificare il MyButton.backgroundColor = UiColor.blackColor()? e come aggiungerò una funzione di override all'azione del pulsante collocato nel mio viewcontroller? – Anokrize

+0

'containerViewController.MyButton.backgroundColor..' nel controller della vista (non il controller della vista del contenitore) – sunshinejr

+0

Sì, quello ha funzionato per me grazie mille per la risposta dettagliata !! – Anokrize

8

vi consiglio di non fare affidamento su segue.identifier, ma piuttosto di prova per destination tipo direttamente:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    super.prepare(for: segue, sender: sender) 

    if let vc = segue.destination as? YourViewController { 
     vc.someVariable = true 
    } 
} 

In questo modo si evita errori con un nome segue errato .

+0

Questa dovrebbe essere la risposta accettata. Se hai più di un UIContainerView e provi l'approccio .identifier fallirai: D grazie a @andrey – Tom

Problemi correlati