iOS按钮标题颜色不会改变

问题描述:

我使用以下代码动态创建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() 
    } 

} 

因为你的按钮会变成回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

刚刚尝试过。同样的事情并没有改变标题颜色。感谢您的输入。 –

为SWIFT 3

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