2015-11-22 9 views
12

Was ich erreichen möchte:Zugang Container Kinder Eigenschaften swift

Benutzer drückt auf den Knopf in der Viewcontroller dann die Farbe der Schaltfläche in dem Behälter Ansicht platziert sollte seine Farbe auf rot.

Wie kann ich vom ViewController aus auf die Schaltfläche in der Containeransicht zugreifen?

enter image description here

Antwort

23

Schritt für Schritt:

  1. Namen des segue zwischen Ihren View-Controller und Container-View-Controller.
  2. Fügen Sie Ihrem View-Controller eine Eigenschaft hinzu, die den Containeransicht-Controller enthält.
  3. Implementieren Sie in Ihrer Ansicht Controller eine Methode prepareForSegue(_:sender:).
  4. In dem Verfahren prüfen, ob segue.identifier gleich der Kennung Sie 1.
  5. Wenn das stimmt, dann speichern Sie die segue.destinationViewController, um Ihr Eigentum von Schritt 2
  6. Jetzt haben Sie die Container-View-Controller in Ihrer Eigenschaft gespeichert, so in Schritt angegeben Sie können Anpassungen von Ihrer Klasse aus vornehmen. Sie sollten den View-Controller bereits in der Methode viewDidLoad() gespeichert haben.

Beispiel:

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

Vielen Dank für Ihre detaillierte Antwort, aber wo kann ich sagen, bearbeiten Sie die MyButton.backgroundColor = UiColor.blackColor()? und wie füge ich eine Override-Funktion in der Aktion der Schaltfläche in meinem Viewcontroller hinzugefügt? – Anokrize

+0

'containerViewController.MyButton.backgroundColor..' in Ihrem View-Controller (nicht der Container-View-Controller) – sunshinejr

+0

Ja, das hat bei mir funktioniert, vielen Dank für die ausführliche Antwort !! – Anokrize

8

Ich empfehle nicht auf segue.identifier zu verlassen, sondern vielmehr Test für destination Typ direkt:

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

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

Auf diese Weise können Fehler mit einem falsch geschriebenen segue Namen vermeiden .

+0

Dies sollte die akzeptierte Antwort sein. Wenn Sie mehr als eine UIContainerView haben und versuchen Sie die .identifier-Methode werden Sie fehlschlagen: D danke @andrey – Tom

Verwandte Themen