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.