多次点击时更改UIButton图像

时间:2017-10-20 13:16:04

标签: ios swift uiimage

我的要求是更改三种不同状态的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 个答案:

答案 0 :(得分:1)

在问题编辑后回答

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

  1. 添加评论

  2. 使用有意义的变量名称 - 例如名为&#34的图片imgRepeat代替image2;重复"

  3. 以下代码适用于我 - 假设图像具有透明区域以显示背景颜色。

    @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)