2016-08-05 34 views
1

Ich habe ein benutzerdefiniertes UIButton (SelectionButton) und frage mich, wie ich es so einrichten kann, dass die Hintergrundfarbe nach dem Drücken geändert wird - was bewirkt, dass diese Farbe für jede SelectionButton-Instanz erhalten bleibt das wurde gedrückt.Ändern der benutzerdefinierten BIB-Farbe des benutzerdefinierten UIButtons bei jedem Drücken in Swift

Kann ich dies in einer Codezeile tun, die für jeden SelectionButton funktioniert, ohne sie einzeln in einer IBAction codieren zu müssen?

Antwort

1

Ich schlage vor, Sie die folgende Lösung. Machen Sie eine Erweiterung UIButton Klasse:

extension UIButton { 
override public var selected: Bool { 
    didSet { 
     if self.selected { 
      self.backgroundColor = UIColor.greenColor() 
      } 
      else { 
       self.backgroundColor = UIColor.redColor() 
      } 
    } 
} 

}

und als in dem Code verbunden UIButton des TouchUpInside (oder anothe Ereignis) gerade gestellt:

@IBAction func myButtonClick(sender: UIButton) { 
    sender.selected = !sender.selected 
} 
+0

Wie bereits erwähnt, ich tue dies eine benutzerdefinierte Klasse namens SelectionButton . Wenn ich UIButton durch SelectionButton in Zeile 1 ersetze, bekomme ich Fehler, weil UIColor ein unaufgelöster Bezeichner ist (was für mich keinen Sinn ergibt ... da SelectionButton eine Unterklasse von UIButton ist) – user3246092

+0

Ich habe das gerade versucht ... Ich habe ein: class SelectionButton: UIButton {...} und lege den Code aus der Erweiterung in diese neuen Klassen. Keine Probleme mit UIColor. Ich empfehle Ihnen, die Importliste zu überprüfen ... – tosha

+0

Ich bekomme "Kann nicht zuweisen Eigenschaft: Sender ist eine 'Let' Konstante." Ich schaute nach oben, keine Lösung kam heraus. Immer noch – user3246092

0

Ich denke, das wird Ihnen helfen -

let discoverButton:UIButton = UIButton(frame: CGRect(x:100 , y: 40.0, width: 360.0, height: 70.0)) 
     discoverButton.setBackgroundImage(UIImage(named: "discover-white.png"), forState: UIControlState.Normal) 
     discoverButton.setBackgroundImage(UIImage(named: "discover-blue.png"), forState: UIControlState.Focused) 
     discoverButton.setBackgroundImage(UIImage(named: "discover-blue.png"), forState: UIControlState.Selected) 
     discoverButton.addTarget(APP_DELEGATE, action:#selector(YourClassName.MenuButtonsPrimaryActionTriggered(_:)), forControlEvents: UIControlEvents.PrimaryActionTriggered) 
     discoverButton.userInteractionEnabled = true; 
     discoverButton.tag=101 



func MenuButtonsPrimaryActionTriggered(btn:UIButton)->Void 
     { 
//Action performed on button 
     } 
1

Hier ist die Lösung whic passen deine Bedürfnisse sind besser. Hier

ist die Klasse Auswahltaste:

class SelectionButton: UIButton { 
override var selected: Bool { 
    didSet { 
     if self.selected { 
      self.backgroundColor = UIColor.greenColor() 
     } 
     else { 
      self.backgroundColor = UIColor.redColor() 
     } 
    } 
} 

}

und der Code, der eine Schaltfläche Instanz programmatisch erstellen wird:

@IBAction func createSelButton(sender: AnyObject) { 
    let myButton = SelectionButton() 
    myButton.frame = CGRect(x: 100, y: 200, width: 200, height: 25) 

    self.view.addSubview(myButton) 
    myButton.setTitle("My Selection Button", forState: UIControlState.Normal); 
    myButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 

    myButton.addTarget(self, action: "clickButton:", forControlEvents: UIControlEvents.TouchUpInside) 
} 

und schließlich Clickfunktion durch den Wähler zeigte:

func clickButton(sender: SelectionButton) { 
    sender.selected = !sender.selected 
} 

Bitte beachten Sie, dass die Slector-Syntax in der neuesten Version von Swift geändert wurde.

0

können Sie die Farbe für verschiedene Zustände in Code ändern, wie

mybutton.setTitleColor (UIColor.redColor(), forState: UIControlState.Selected)