多次点击时更改UIButton图像

多次点击时更改UIButton图像

问题描述:

我的要求是更改三种不同状态的UIButton图像。截至目前,当我点击按钮的前两次(前两个状态),它的作品。但是当我第三次点击或触发我的第三个状态时,第二个图像似乎仍然出现。如何解决这个问题?我的代码如下。多次点击时更改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个图像 - 你怎么会看到3对不同的那些? – DonMag

+0

对于第三种情况,我也使用第一个图像,但更改了单击事件和背景颜色的输出。 – danu

回答问题后编辑

一对夫妇的提示,以使其更容易调试......

  1. 添加评论

  2. 使用的变量名有道理 - 例如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) 
+0

我做了但仍然没有解决问题,再加上我更新了代码 – danu

+0

与你的提示算出来 – danu