[英]Change the UIButton Image when tapped multiple times
我的要求是将UIButton图像更改为三种不同的状态。 到目前为止,当我点击按钮的前两次(前两个状态)时,它可以工作。 但是当我第三次点击或触发我的第三状态时,第二张图像似乎仍然出现。 如何解决这个问题? 我的代码如下。
@IBAction func repeateButtonPressed(_ sender: Any) {
let image = UIImage(named : "repeat_one")
let image2 = UIImage(named : "repeat")
if(playerRepeatMode == RepeatModes.NO_REPEAT){
playerRepeatMode = RepeatModes.REPEAT_LIST
self.repeatButton.setBackgroundImage(image2, for: .normal)
self.repeatButton.backgroundColor = buttonToggleColor
}
else if(playerRepeatMode == RepeatModes.REPEAT_LIST){
playerRepeatMode = RepeatModes.REPEAT
self.repeatButton.setBackgroundImage(image, for: .normal)
// self.repeatButton.setBackgroundImage(#imageLiteral(resourceName: "repeat_one"), for: UIControlState.normal)
self.repeatButton.backgroundColor = buttonToggleColor
}else{
playerRepeatMode = RepeatModes.NO_REPEAT
self.repeatButton.setBackgroundImage(image2, for: .normal)
self.repeatButton.backgroundColor = UIColor.clear
}
}
问题后回答编辑
一些提示,使调试变得更容易...
添加评论
使用有意义的变量名-例如,对于名为“ repeat”的图像,使用imgRepeat
而不是image2
以下代码对我来说效果很好-假设图像具有透明区域以显示背景色。
@IBAction func repeateButtonPressed(_ sender: Any) {
let imgRepeatOne = UIImage(named : "repeat_one")
let imgRepeat = UIImage(named : "repeat")
if (playerRepeatMode == RepeatModes.NO_REPEAT) {
// currently NO_REPEAT, changing to REPEAT_LIST
playerRepeatMode = RepeatModes.REPEAT_LIST
// set BackroundImage to "repeat"
self.repeatButton.setBackgroundImage(imgRepeat, for: .normal)
// set BackgroundColor to buttonToggleColor
self.repeatButton.backgroundColor = buttonToggleColor
} else if (playerRepeatMode == RepeatModes.REPEAT_LIST) {
// currently REPEAT_LIST, changing to REPEAT
playerRepeatMode = RepeatModes.REPEAT
// set BackroundImage to "repeat_one"
self.repeatButton.setBackgroundImage(imgRepeatOne, for: .normal)
// set BackgroundColor to buttonToggleColor
self.repeatButton.backgroundColor = buttonToggleColor
} else {
// currently REPEAT, changing to NO_REPEAT
playerRepeatMode = RepeatModes.NO_REPEAT
// set BackroundImage to "repeat"
self.repeatButton.setBackgroundImage(imgRepeat, for: .normal)
// set BackgroundColor to clear
self.repeatButton.backgroundColor = UIColor.clear
}
}
原始答案
我认为这个问题是您正在使用.setImage()
在同一个地方,但.setBackgroundImage()
中的其他两个地方。
假设您希望将 image2
用作背景,并将image
用作按钮图像,那很好,但是您需要清除另一个属性。
因此,在使用背景图片的地方:
self.repeatButton.setBackgroundImage(image2, for: .normal)
// also *clear* the button image
self.repeatButton.setImage(nil, for: .normal)
并且,在使用按钮图像的位置:
self.repeatButton.setImage(image, for: .normal)
// also *clear* the background image
self.repeatButton.setBackgroundImage(nil, for: .normal)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.