2016-03-18 7 views
0

Ich versuche nur Text zu einem UILabel auf einem anderen Viewcontroller über eine segue zu senden:Warum kann ich keinen Wert an ein UILabel auf einem anderen ViewController senden?

let controller = segue.destinationViewController as! DetailViewViewController 
controller.detailViewLabel.text = "Hello!" 

Aber wenn der Übergang durchgeführt wird, detailViewLabel ist nil jedes Mal.

Wenn Sie jedoch die Zeichenfolge an eine neue Variable vom Typ string senden und dann detailViewLabel.text der neuen Zeichenfolge in viewDidLoad zuweisen, funktioniert es einwandfrei.

Zum Beispiel funktioniert das gut:

var detailViewLabelText: String! 

@IBOutlet weak var detailViewLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    detailViewLabel.text = detailViewLabelText 
    // Do any additional setup after loading the view. 
} 

Warum kann es nicht direkt die Zeichenfolge in die text Eigenschaft der UILabel über eine segue schicken?

Antwort

5

Ausgänge in View-Controllern sind erst verbunden, wenn die Ansicht das erste Mal geladen wird. Ansichten werden geladen, wenn auf die Eigenschaft view des UIViewControllers zum ersten Mal zugegriffen wird.

Ihr Code sollte also funktionieren, wenn Sie das Laden der Ansicht erzwingen, bevor Sie versuchen, den Text auf dem Etikett festzulegen, z.

let controller = segue.destinationViewController as! DetailViewViewController 
let _ = controller.view 
controller.detailViewLabel.text = "Hello!" 
0

Sie können die Zeichenfolge, die Sie senden möchten, auch außerhalb der Klasse initialisieren, dann ist sie für alle Klassen verfügbar. Das ist nicht wirklich professionell, aber es funktioniert :)

0

Ich mache etwas ähnliches wie Daniel Hall, aber ich setze die Daten auf eine Variable und dann, sobald die Ansicht lädt, setze ich den label.text auf die Variable.

Verwandte Themen