我的要求是更改三种不同状态的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
}
}
答案 0 :(得分:1)
在问题编辑后回答
一些提示,使其更容易调试......
添加评论
使用有意义的变量名称 - 例如名为&#34的图片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)