You probably want to change the image for the highlighted state.
You shouldn't need to do anything in the touch:
method.
Just change the line:
[button setImage:[UIImage imageNamed:@"touch_selected.png"] forState:UIControlStateSelected];
for:
[button setImage:[UIImage imageNamed:@"touch_selected.png"] forState:UIControlStateHighlighted];
Then the image should change when the button is touched.
EDIT:
To have the button keep the image once the touch has been released, you essentially want to invert the selected state each time a touch is released on the button. I suggest adding a target to the button:
[myButton addTarget:self action:@selector(buttonPushed) forControlEvent:UIControlEventTouchUpInside];
Then in that method, invert the selected state:
- (void)buttonPushed
{
[myButton setSelected:!myButton.selected];
}
That should hopefully do the trick!