2017-12-26 2 views
0

Ich erstelle eine mehrere Etiketten, bezogen auf die Anzahl meiner Array. Und das funktioniert gut. Aber nach einigen Benutzerinteraktionen möchte ich die Labelfarbe ändern.iOS/Swift 4: Änderung der Farbe von einem programmatisch erstellt Label

Hier ist mein Code:

Das Array etwas wie folgt aussieht:

var vids = [5: ["urltovideo1", "locationOne"], 7: ["urltovideo2", "locationTwo"]] 

for label in vids[x][1] { 
     let label = UILabel() 
     label.translatesAutoresizingMaskIntoConstraints = false 
     label.backgroundColor = UIColor.gray 
     label.text = vids[index[j] as! Int]![2] 
     let z = CGFloat(j) 
     self.view.addSubview(label) 
     let horConstraint = NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 0.3+z, constant: 0.0) 
     let verConstraint = NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 0.75, constant: 0.0) 
     view.addConstraints([horConstraint, verConstraint]) 
} 

-Nach der Benutzer mit der App interagiert, versuche ich, dies zu tun:

for label in vids[x][1] { 
    let label = UILabel() 
    label.backgroundColor = UIColor.green 
} 

. ..aber nichts passiert.

Antwort

1

Wenn Sie tun, nämlich dies:

for label in vids[x][1] { 
    let label = UILabel() 
    label.backgroundColor = UIColor.green 
} 

Ihre Etiketten werden nicht geändert. Das Problem ist, dass Sie in Zeile let label = UILabel() eine neue Instanz von UILabel erstellen. Dieses Etikett ist nicht das Etikett, das Sie auf dem iPhone-Bildschirm sehen.

Eine der möglichen Lösung s.

erstellen irgendwo in Ihrer Klasse eine Speicherung von UILabels, die Sie in der ersten Schleife erstellen.

var vids = [5: ["urltovideo1", "locationOne"], 7: ["urltovideo2", "locationTwo"]] 
var labels: [String: UILabel] = [:] 

for labelString in vids[x][1] { 
     let label = UILabel() 
     labels[labelString] = label 
     label.translatesAutoresizingMaskIntoConstraints = false 
     label.backgroundColor = UIColor.gray 
     label.text = vids[index[j] as! Int]![2] 
     let z = CGFloat(j) 
     self.view.addSubview(label) 
     let horConstraint = NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 0.3+z, constant: 0.0) 
     let verConstraint = NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 0.75, constant: 0.0) 
     view.addConstraints([horConstraint, verConstraint]) 
} 

und später verwenden:

for labelString in vids[x][1] { 
    let label = labels[labelString] // < Here you retrieves a saved label 
    label.backgroundColor = UIColor.green 
} 
+0

Arbeitete groß! Danke für die schnelle Antwort! – Raph

+0

Einen schönen Tag noch – Vyacheslav

Verwandte Themen