多次点击时更改 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 图像的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIButton 标题?

iOS:如何使用 UIButton 更改 UIImage [关闭]

添加子视图后UIButton无法点击

Swift:如何在单击提交按钮时更改 UIButton 图像

如何在 Swift 中 UITest 更改 UIButton 的图像?

我想在点击它时更改 UIButton Image