2017-01-05 2 views
0

Ich fragte vor kurzem eine Frage here, wo ich verstehen wollte, wie man die UIColor von button 's image ändern. Ich folgte @ Dorian Roy Empfehlung, die sehr sauber war und es hat gut für meine Bedürfnisse funktioniert. Während meine spezifische Frage zuvor um einen einzelnen Knopf herum war, würde ich gerne wissen, wie man mehrere UIBUttons ändert. Kann das gemacht werden? Mein Gedanke wäre subclass a UIButton und initialisiert es, um automatisch seine image Farbe zu ändern. Ich kann jedoch nicht recht begreifen, wie das geht.Wie kann ich in Swift3 die Farben einer Schaltflächengruppe ändern?

Hier mache ich gerade diese Aktion und suche eine elegantere Lösung.

private func changeBtnColors() { 
    let ccStencil = creditCardBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    let planeStencil = planeBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    let towelStencil = towelBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    let carStencil = carBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    let trainStencil = trainBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    let graphStencil = graphBtn.imageView?.image?.withRenderingMode(.alwaysTemplate) 

    creditCardBtn.setImage(ccStencil, for: .normal) 
    planeBtn.setImage(planeStencil, for: .normal) 
    towelBtn.setImage(towelStencil, for: .normal) 
    carBtn.setImage(carStencil, for: .normal) 
    trainBtn.setImage(trainStencil, for: .normal) 
    graphBtn.setImage(graphStencil, for: .normal) 

    creditCardBtn.tintColor = UIColor.white 
    planeBtn.tintColor = UIColor.white 
    towelBtn.tintColor = UIColor.white 
    carBtn.tintColor = UIColor.white 
    trainBtn.tintColor = UIColor.white 
    graphBtn.tintColor = UIColor.white 
} 

Antwort

2

Der einfachste Weg ist ein Array von UIButton zu erstellen und durch alle Elemente zu durchlaufen.

let buttonArray = [creditCardBtn, planeBtn, towelBtn, carBtn, trainBtn, graphBtn] 
buttonArray.forEach { button in 
    let image = button.imageView?.image?.withRenderingMode(.alwaysTemplate) 
    button.setImage(image, for: .normal) 
    button.tintColor = UIColor.white 
} 

können Sie auch extension von UIButton erstellen und diese Einstellungen Code von Button in einer Funktion wie diese setzen.

extension UIButton { 
    func setImageWithRandringMode() { 
     let image = self.imageView?.image?.withRenderingMode(.alwaysTemplate) 
     self.setImage(image, for: .normal) 
     self.tintColor = .white 
    } 
} 

Und jetzt einfach anrufen diese Funktion mit forEach Schließung.

buttonArray.forEach { button in 

    button.setImageWithRandringMode() 
} 
Verwandte Themen