Como desativar o estado de controle de destaque de um UIButton?


147

Eu tenho um UIButton que, quando selecionado, não deve mudar de estado ao ser tocado. O comportamento padrão é que ele fique no UIControlStateHighlighted ao ser tocado, e isso está me deixando irritado.

Sugestões?

Respostas:


313

Seu botão deve estar buttonTypedefinido 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".


1
Alguma chance de você saber qual seria a versão programática disso? No momento, eu tenho o funcionamento hackishly, desativando-o e vestindo-o como sendo selecionado.
kbanman

99
uibutton.adjustsImageWhenHighlighted = NO;
Haydn

43
Verifique também se o tipo de botão está definido como PERSONALIZADO. (Como Mosib Asad mencionou em outra resposta)
Vlad Lego

Ótimo!!! apenas uma pequena e óbvia mudança que eu perdi !!! Eu havia definido o tipo de classe UIButton como MyCustomClass, mas esqueci de mudar esse. Por isso, estava dando efeito destacado no botão não selecionado. Agradeço novamente.
Vinod Supnekar

38

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.


2
Esta foi a peça que faltava: tipo de botão PERSONALIZADO. Thanx!
JOM

1
E se eu gostaria de manter como UIButton do sistema? não consigo remover o destaque ajusta a imagem?
Amjad Husseini

36

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


1
Isso funciona perfeito para mim. A adjustsImageWhenHighlightedpropriedade de UIButtonparece afetar apenas a imagem de fundo.
Michael Thiel

Esteja ciente de que, se você decidir atribuir uma imagem ao 'estado desativado', não chamará setBackgroundImage. Em vez disso, você deve fazer o seguinte [botão setImage: image forState: UIControlStateDisabled]; Também esteja ciente de que, conforme mencionado neste segmento, a propriedade UDButton ajustaImageWhenHighlighted apenas afeta a imagem de plano de fundo.
HamasN


23
button.adjustsImageWhenDisabled = NO;

é igualmente útil por ter a aparência de um botão desativado.


5

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


setTitleColor é tudo que eu precisava para desativar destaque no texto de UIButton
atulkhatri

3

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.

}

3

Para Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

apenas duas coisas:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

2

Tive um problema semelhante e descobri que "desmarcar" Limpa o conteúdo gráfico no criador de interface corrigiu meu problema

insira a descrição da imagem aqui


2

faça seu botão Digite - "Personalizado" e Desmarque - Realçado Ajuste a imagem e está pronto.


-3

Para evitar definir quebra de linha do UIButton como Clip , use o padrão Truncate Middle

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.