Respostas:
Seu botão deve estar buttonType
definido como Personalizado.
No IB, você pode desmarcar "Realçar ajusta a imagem".
Programaticamente, você pode usar theButton.adjustsImageWhenHighlighted = NO;
Opções semelhantes também estão disponíveis para o estado "desativado".
Além da resposta acima de desmarcar "realçar ajusta a imagem" no IB, verifique se o tipo de botão está definido como PERSONALIZADO.
Isso funcionará para você:
[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];
3ª linha é o truque aqui ...
Isso funciona da mesma maneira para definir image / backgroundImage
adjustsImageWhenHighlighted
propriedade de UIButton
parece afetar apenas a imagem de fundo.
Dependendo do que muda do padrão para o estado destacado do botão, você pode chamar alguns métodos para configurá-los para o que você precisa. Então, se a imagem mudar, você pode fazer
[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];
Se o texto mudar, você pode fazer
[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];
outras funções similares:
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state
OK, aqui está uma solução fácil, se isso funcionar para você, depois de uma semana batendo com a cabeça nisso, finalmente me ocorreu definir apenas = NÃO para a primeira linha do método IBAction para o TouchUpInside ou TouchDown, ou o que funcionar. Para mim, estava tudo bem no TouchUpInside.
-(IBAction)selfDismiss:(id)sender {
self.btnImage.highlighted = NO;
NSLog(@"selfDismiss");
etc, etc, etc.
}
Para Swifty Developer -
yourButton.adjustsImageWhenHighlighted = false