繁体   English   中英

多次点击时更改UIButton图像

[英]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
    }
}

问题后回答编辑

一些提示,使调试变得更容易...

  1. 添加评论

  2. 使用有意义的变量名-例如,对于名为“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM