John
John

Reputation: 353

Change UIButton image when button pressed

I'm trying to change the image button just in the moment that the button is pressed. When released, i want go back to the original.

I read some posts here, but it's not working.

Is it possible do it in the GUI without programming?

I tried this:

-(IBAction) toggleUIButtonImage:(id)sender{
     if ([sender isSelected]) {
         [sender setImage:unselectedImage forState:UIControlStateNormal];
         [sender setSelected:NO];
     }else {
         [sender setImage:selectedImage forState:UIControlStateSelected];
         [sender setSelected:YES];
      }
 } 

But what kind of sender events should i associated the function toggleUIButtonImage ?

Thanks

Upvotes: 4

Views: 7597

Answers (4)

PostPCDev
PostPCDev

Reputation: 684

You can do it in interface builder by giving different settings to each button state config:

The available states are: default, selected and disabled

Or you can also change the 'settings' of the button in code by using 'UIButton' setImage:forState method.

    [myButton setImage:highlightedImage forState:UIControlStateHighlighted];

Usually, you should do it by 'configuring' the button as described above and not by changing the sub views of the button manually as a response to user interaction. The reason it doesn't work for you is the inherent hidden behaviour of UIButton. You manually make the change of a subview of the button as a response to user interaction, but your change is changed back to what was defined in the settings of your button (according to the button's state). So it seems like your code doesn't do anything at all.

Upvotes: 12

Mutawe
Mutawe

Reputation: 6524

in the ViewDidLoad Method

set the property of

[[button setImage:[UIImage ImageNamed:@"unselectedImage.png"] forState: UIControlStateNormal]; 
[[button setImage:[UIImage ImageNamed:@"selectedImage.png"] forState: UIControlStateHighlighted ];

Upvotes: 4

Scott
Scott

Reputation: 110

This can be done with Interface Builder, no code necessary.

Select your button in IB, go to the right sidebar, change the Type to Custom, make sure State Config is Default, and type in the name of your "regular image" reference in the Background Image text field.

Then change State Config to Highlighted, and type in the name of your "pressed image" reference in the Background Image text field.

Upvotes: 2

Greg
Greg

Reputation: 10788

In IB, you can set the image for the Highlighted (not Selected) state of the button. That should do it.

Look in the Button section of the Utilities pane, and select Highlighted from the State Config drop-down.

Upvotes: 1

Related Questions