Nathan
Nathan

Reputation: 13

UIButton not changing image

I'm trying to create a "like" button for my app. When I press the button, I want it to change to a second image, and when I press it again I went it to change back to the first image.

Here is my code:

@IBAction func sendLike(sender: UIButton) {

    if let _ = UIImage(named:"pinkLike.png") {
        sender.setImage(UIImage(named:"like.png"), forState: .Normal)
    }

    if let _ = UIImage(named:"like.png") {
        sender.setImage(UIImage(named:"pinkLike.png"), forState: .Normal)
    }
}

For some reason this line of code works how I want it to:

if let _ = UIImage(named:"like.png") {
        sender.setImage(UIImage(named:"pinkLike.png"), forState: .Normal)
    }

But when I press the button again, this line doesn't change it back:

if let _ = UIImage(named:"pinkLike.png") {
        sender.setImage(UIImage(named:"like.png"), forState: .Normal)
    }

Upvotes: 1

Views: 1921

Answers (1)

seto nugroho
seto nugroho

Reputation: 1379

You set both of those image in Normal state, so your "like.png" will always override "pinkLike.png" image.

You need to put "pinkLike.png" in different state.

if let _ = UIImage(named:"pinkLike.png") {
    sender.setImage(UIImage(named:"like.png"), forState: .Selected)
}

and change your selected state before setting the image. So your code will be like this.

@IBAction func sendLike(sender: UIButton) {
    sender.selected = !sender.selected
    if let _ = UIImage(named:"pinkLike.png") {
        sender.setImage(UIImage(named:"like.png"), forState: .Normal)
    }

    if let _ = UIImage(named:"like.png") {
        sender.setImage(UIImage(named:"pinkLike.png"), forState: .Selected)
    }
}

Upvotes: 4

Related Questions