2017-07-04 6 views
1

Ich habe eine Reihe von Tasten in einem horizontalen UIScrollView programmgesteuert hinzugefügt. Ich muss die Farbe der vom Benutzer ausgewählten Schaltfläche ändern. Wenn der Benutzer jedoch eine andere Schaltfläche auswählt, muss die Farbe der vorherigen Schaltfläche auf die Standardfarbe geändert werden. Wie kann ich das tun? Bitte helfen Sie mir ...Wie ändert man die Farbe der vorherigen Taste, wenn man die nächste Taste drückt?

func createHorizontalScroll() 
{ 
    let scrollView = UIScrollView(frame: CGRect(x: CGFloat(0), y: CGFloat(410), width: CGFloat(view.frame.size.width), height: CGFloat(40))) 

    var buttonX: CGFloat = 0 

    for index in 0..<btnNames.count 
    { 
     //add an element and the previous element together 
     let sum = btnNames[index] 

     button = UIButton(frame: CGRect(x: CGFloat(buttonX), y: CGFloat(0), width: CGFloat(100), height: CGFloat(40))) 

     print("btnNames:\(sum)") 

     button.setTitle("\(sum)",for:.normal) 
     button.layer.borderWidth = 2.5 
     button.layer.borderWidth = 2.5 
     button.layer.borderColor = UIColor.white.cgColor 
     button.layer.backgroundColor = UIColor.black.cgColor 
     button.tag = index 
     scrollView.addSubview(button) 
     buttonX = button.frame.size.width + buttonX 

     button.addTarget(self, action: #selector(changeView), for: .touchUpInside) 
    } 

    scrollView.contentSize = CGSize(width: CGFloat(buttonX), height: CGFloat(scrollView.frame.size.height)) 
    scrollView.backgroundColor = UIColor.clear 
    view.addSubview(scrollView) 
} 

func changeView(_ sender: UIButton) 
{ 
    print("I Clicked a button \(Int(sender.tag))") 
} 
+0

Bitte senden Sie Ihren Code –

+0

zurückgesetzt habe ich meine Quelle Code hier. Ich muss die Schaltfläche Farbe in ChangeView-Funktionalität ändern – krishna

+0

funktioniert Buttons Tag oder Titel bleiben gleich in der Anwendung? –

Antwort

2

Da Sie bereits Tags verwenden, sollte es kein Problem sein. Die changeView Funktion sollte so funktionieren:

func changeView(_ sender: UIButton) 
{ 
    let scrollView = sender.superview as! UIScrollView //This is mildly hacky - store your scroll view in an instance variable 
    for view in scrollView.subviews { 
     guard let button = view as? UIButton else { 
      continue 
     } 

     button.backgroundColor = sender.tag == button.tag ? UIColor.red : UIColor.black 
    } 
} 
+0

Vielen Dank Sir, Sie sind fantastisch – krishna

+0

Vergessen Sie nicht, Antworten als akzeptiert zu markieren, wenn sie Ihre Probleme lösen. – Majster

+1

Sicher habe ich schon getan – krishna

0

Einfache Lösung ohne Tags.

Deklarieren eine Eigenschaft currentButton

weak var currentButton : UIButton? 

In changeView zurückgesetzt, die Farbe des currentButton, stellen die Farbe des sender und weisen die sender zu currentButton.

func changeView(_ sender: UIButton) 
{ 
    currentButton?.backgroundColor = .black 
    currentButton = sender 
    sender.backgroundColor = .red 
} 

Durch optional die Farbe currentButton Verkettungs nicht eingestellt werden, wenn currentButtonnil.

0

ist eine Woche Eigenschaft vom Typ UIButton Halten Sie die ausgewählte Taste zeitlich zu speichern.

weak var selectedButton: UIButton? 

In den Wählern für Ihre Anstecker der Farbe der selectedButton auf Standard, dann die Farbe der Schaltfläche neu gewählten ändern und die selectedButton

@IBAction func actionTouchUpInside(sender: UIButton) { 
    if let selectedButton = self.selectedButton { 
     selectedButton.backgroundColor = UIColor.clear 
    } 

    sender.backgroundColor = UIColor.blue 
    selectedButton = sender 
} 
Verwandte Themen