You can do this in the interface builder by setting different settings for each button state:

Or you can also change the "settings" of the button in the code using the "UIButton" setImage: forState method.
[myButton setImage:highlightedImage forState:UIControlStateHighlighted]
Normally, you should do this by “customizing” the button as described above, and not by manually changing the submenu of the button as a response to user interaction. The reason it doesn't work for you is because of the hidden behavior of UIButton. You manually make changes to the subtitle of the button in response to user interaction, but your change changes to what was defined in the settings of your button (in accordance with the state of the button). So it seems that your code is not doing anything.
source share