2016-04-25 108 views
2

我使用以下代碼動態創建UIButton,並按照指定樣式創建它。iOS按鈕標題顏色不會改變

let frame = CGRect(x: 10, y: 6, width: 60, height: 30)  
let button = UIButton(frame: frame) 
button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) 
button.backgroundColor = UIColor.whiteColor() 
button.addTarget(self, action: "filterByCategory:", forControlEvents: UIControlEvents.TouchUpInside) 
self.categoryScrollView.addSubview(button) 

有了這個按鈕,我想在點擊時切換樣式。 以下代碼更改背景顏色,但不更改標題顏色。 任何想法爲什麼標題顏色不會改變?

func filterByCategory(sender:UIButton) { 

    if sender.backgroundColor != UIColor.blackColor() { 
     sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Selected) 
     sender.backgroundColor = UIColor.blackColor() 
    } else { 
     sender.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) 
     sender.backgroundColor = UIColor.whiteColor() 
    } 

} 

回答

7

因爲你的按鈕會變成回UIControlState.Normal你觸摸後,它成爲.Highlighted,然後.Normal

您應該設置 sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Selected)

sender.setTitleColor(UIColor.whiteColor(), forState: UIControlState. Normal)

或,只需爲所有人​​設置Ë狀態,因爲ü沒有顏色的支票像

sender.setTitleColor(UIColor.whiteColor(), forState: [.Normal,.Selected,.Highlighted])

*編輯:上述方法無效,可以使用NSAttributedString代替

if self.loginButton.backgroundColor == UIColor.blackColor() { 
      let tittle = NSAttributedString(string: "Login", attributes: [NSForegroundColorAttributeName: UIColor.blackColor()]) 
      loginButton.setAttributedTitle(tittle, forState: .Normal) 
      loginButton.backgroundColor = UIColor.whiteColor() 
     } else { 
      let tittle = NSAttributedString(string: "Login", attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()]) 
      loginButton.setAttributedTitle(tittle, forState: .Normal) 
      loginButton.backgroundColor = UIColor.blackColor() 
     } 
+0

設置中選擇到Normal不起作用。我已經嘗試爲默認和輕擊功能設置正常。 –

+0

嗨:D如何設置爲所有狀態 – Tj3n

+0

剛剛嘗試過。同樣的事情並沒有改變標題顏色。感謝您的輸入。 –

0

爲SWIFT 3

button.setTitleColor(.black, for: .normal)