Swift 更改按钮图像在不同状态下的着色颜色
嗨,我有个问题想不出来。我已经写了一个扩展,帮助我着色透明PNG的Swift 更改按钮图像在不同状态下的着色颜色,swift,uibutton,Swift,Uibutton,嗨,我有个问题想不出来。我已经写了一个扩展,帮助我着色透明PNG的 extension UIButton { func setImageColorForState(image: UIImage, color: UIColor, forState: UIControlState) { let temp = image.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) setImage(te
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)
不知何故,它只需要最后一个状态。因此,在这种情况下,高亮显示状态将被忽略。我在这里遗漏了什么?当您按下时,突出显示的内容将被调用,您是否尝试使用所选状态?此外,还应将所选布尔值设置为true 否则,它将简单地恢复到正常状态,因此具有灰色
您也可以参考此项:我无法告诉您尝试执行的操作的解决方案,但我可以告诉您的代码有什么问题: 在这里,您正在为状态设置图像:
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)
。。。您只需覆盖淡色
请注意,我还没有解决您的问题的方法。这可以通过子类化UIButton并重写isHighlighted变量来实现,类似于此处接受的答案() 或者,相当于:
override open var isHighlighted: Bool {
didSet {
if (isHighlighted) { self.tintColor = UIColor.red }
else { self.tintColor = UIColor.gray }
}
这是一个老问题,但我还是写了这篇文章,以防有人发生类似的事情。使用Swift 3.2和4.0进行测试
尽管目前可以跳过子类化部分,并对UIButton扩展执行相同的操作,但不应该这样做()。它不必保持选中状态。就在我按下它的时候,它会在一瞬间变为黄色,向用户显示它被点击了。
override open var isHighlighted: Bool {
didSet {
if (isHighlighted) { self.tintColor = UIColor.red }
else { self.tintColor = UIColor.gray }
}