簡體   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