2016-04-25 6 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])

* Edit: Выше не работает, можно использовать вместо 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

Настройка Selected для Normal не работает. Я пробовал настройку Normal как по умолчанию, так и по нажатой функции. –

+0

Привет: D как насчет установить его для всех состояний – Tj3n

+0

Просто попробовал. То же самое не изменило цвет заголовка. Спасибо за ваш вклад. –

0

для быстрой 3

button.setTitleColor(.black, for: .normal) 
Смежные вопросы