2015-11-10 4 views
1

Привет У меня проблема, я не могу понять. Я написал расширение, которое помогает мне раскрасить транспарант PNG-хизменить цвет изображения кнопки в разных состояниях

extension UIButton { 
    func setImageColorForState(image: UIImage, color: UIColor, forState: UIControlState) { 
     let temp = image.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
     setImage(temp, forState: forState) 
     tintColor = color 
    } 
} 

Я использую расширение следующим образом:

btn.setImageColorForState(originalImage!, color: UIColor.yellowColor(), forState: .Highlighted) 
btn.setImageColorForState(originalImage!, color: UIColor.grayColor(), forState: .Normal) 

Как-то он принимает только последнее состояние только. Поэтому в этом случае состояние подсветки игнорируется. Что мне здесь не хватает?

ответ

0

Подсвеченный будет называться только тогда, когда вы нажимаете, вы пробовали с выбранным состоянием? Кроме того, вы должны установить выбранное значение boolean в true.

В противном случае он просто вернется в нормальное состояние и, следовательно, будет иметь серый цвет.

Вы можете обратиться к этому, а также: Keeping a UIButton selected after a touch

+0

Он не обязательно должен быть выбран. Просто, когда я нажимаю, он должен перейти на желтый цвет в течение секунды секунды, чтобы показать пользователю, что его нажали. – Reshad

0

Я не могу сказать вам решение для того, что вы пытаетесь сделать, но я могу сказать вам, что случилось с вашим кодом:

Здесь вы устанавливаете изображение для состояния:

let temp = image.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) 
setImage(temp, forState: forState) 

И здесь вы устанавливаете TintColor. Но TintColor не связан с конкретным состоянием. Он влияет на все состояния кнопки.

tintColor = color 

Так что если ваш вызываете это ...

btn.setImageColorForState(originalImage!, color: UIColor.yellowColor(), forState: .Highlighted) 
btn.setImageColorForState(originalImage!, color: UIColor.grayColor(), forState: .Normal) 

... вы просто переопределить TintColor.

Жаль, что у меня пока нет решения проблемы.

Смежные вопросы