2016-08-05 82 views
1

我有一個自定義的UIButton(SelectionButton),想知道如何讓它可以在推後推動背景顏色 - 導致它保持SelectionButton的每個實例的顏色已被按下。更改任何按Swift自定義UIButton的BG顏色

我可以在一行代碼中做到這一點嗎?它可以用於每個SelectionButton,而無需在IBAction中一次編寫一個代碼?

回答

1

我建議你以下解決方案。做一個擴展的UIButton類:

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

}

,比連接到的UIButton的TouchUpInside(或anothe事件)的代碼只是把:

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

如前所述,我這個做稱爲SelectionButton的自定義類。當我在第1行中用SelectionButton代替UIButton時,我得到的錯誤是UIColor是一個無法解析的標識符(這對我沒有意義,因爲SelectionButton是UIButton的一個子類) – user3246092

+0

我剛試過這個......我做了一個: class SelectionButton:UIButton {...}並將擴展中的代碼放到這個新類中。與UIColor沒有任何問題。我建議你檢查進口清單... – tosha

+0

我得到「不能分配給財產:發件人是'讓'常量。」我看了這個,沒有解決方案突然出現。仍在尋找 – user3246092

0

我認爲這會幫助你 -

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

這裏是whic可能適合的解決方案你的需求更好。

這裏是類選擇按鈕:

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

}

和代碼,將創建編程按鈕實例:

@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) 
} 

最後clickButton功能的選擇指出:

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

請記住,在最新版本的Swift中,slector語法已經發生了變化。

0

您可以在代碼中改變顏色不同的州,如

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