多次点击时更改 UIButton 图像
Posted
技术标签:
【中文标题】多次点击时更改 UIButton 图像【英文标题】:Change the UIButton Image when tapped multiple times 【发布时间】:2017-10-20 13:16:03 【问题描述】:我的要求是将 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
【问题讨论】:
您只有 2 张图片 - 您希望如何看到 3 张不同的图片? 第三个实例没有,我也使用第一张图片,但是改变了点击事件的输出和背景颜色。 【参考方案1】:问题编辑后回答
一些使调试更容易的提示...
添加 cmets
使用有意义的变量名 - 例如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)
【讨论】:
我解决了但仍然没有解决问题,另外我更新了代码 用你的小费弄明白了以上是关于多次点击时更改 UIButton 图像的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何使用 UIButton 更改 UIImage [关闭]
Swift:如何在单击提交按钮时更改 UIButton 图像