Come disabilitare lo stato di controllo dell'evidenziazione di un UIButton?


147

Ho un UIButton che, quando selezionato, non dovrebbe cambiare stato quando viene toccato. Il comportamento predefinito è che sia in UIControlStateHighlighted mentre viene toccato, e questo mi sta facendo arrabbiare.

Suggerimenti?

Risposte:


313

Il tuo pulsante deve essere buttonTypeimpostato su Personalizzato.

In IB è possibile deselezionare "Evidenzia regola immagine".

A livello di programmazione è possibile utilizzare theButton.adjustsImageWhenHighlighted = NO;

Opzioni simili sono disponibili anche per lo stato "disabilitato".


1
Qualche possibilità di sapere quale sarebbe la versione programmatica di questo? In questo momento ho fatto in modo che funzioni in modo hackerato disabilitandolo e vestendolo come selezionato.
Kbanman,

99
uibutton.adjustsImageWhenHighlighted = NO;
Haydn,

43
Assicurarsi inoltre che il tipo di pulsante sia impostato su PERSONALIZZATO. (Come Mosib Asad ha menzionato in un'altra risposta)
Vlad Lego,

Grande!!! solo un piccolo ed evidente cambiamento che mi mancava !!! Avevo impostato il tipo di classe UIButton su MyCustomClass ma rinunciai a cambiarlo. Quindi stava dando l'effetto evidenziato pulsante non selezionato. Grazie ancora.
Vinod Supnekar,

38

Oltre alla risposta sopra deselezionata "evidenzia regola immagine" in IB, assicurarsi che il tipo di pulsante sia impostato su PERSONALIZZATO.


2
Questo era il pezzo mancante: pulsante di tipo CUSTOM. Grazie!
JOM

1
Cosa succede se vorrei mantenere un UIButton di sistema? non riesco a rimuovere l'evidenziazione regola l'immagine?
Amjad Husseini,

36

Questo funzionerà per te:

[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];

La terza linea è il trucco qui ...

Funziona allo stesso modo per l'impostazione di image / backgroundImage


1
Questo funziona perfettamente per me. La adjustsImageWhenHighlightedproprietà di UIButtonsembra influire solo sull'immagine di sfondo.
Michael Thiel,

Tenere presente che se si decide di assegnare un'immagine allo "stato disabilitato", non si chiama setBackgroundImage. Invece, dovresti fare quanto segue [button setImage: image forState: UIControlStateDisabled]; Inoltre, tieni presente che, come indicato in questo thread, la proprietà UIButton di adjustsImageWhenHighlighted ha effetto solo sull'immagine di sfondo.
HamasN,


23
button.adjustsImageWhenDisabled = NO;

è ugualmente utile per avere il proprio aspetto di un pulsante disabilitato.


5

A seconda di ciò che cambia dallo stato predefinito del pulsante evidenziato, è possibile chiamare un paio di metodi per impostarli su ciò che è necessario. Quindi, se l'immagine cambia, puoi farlo

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

Se il testo cambia, puoi farlo

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

altre funzioni simili:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state


setTitleColor è tutto ciò che mi serviva per disabilitare l'evidenziazione sul testo di
uibutton

3

OK, ecco una soluzione semplice se questo funziona per te, dopo una settimana di battute sulla testa, mi è venuto in mente di impostare l'evidenziato = NO per la prima riga del metodo IBAction per TouchUpInside o TouchDown, o qualsiasi altra cosa funzioni. Per me andava bene sul TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

3

Per sviluppatori Swifty -

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

solo due cose:

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

2

Ho avuto un problema simile e ho scoperto che "deselezionando" il contenuto grafico di Clears nel builder di interfacce ha risolto il mio problema

inserisci qui la descrizione dell'immagine


2

fai il tuo pulsante Tipo - "Personalizzato" e Deseleziona - Evidenziato Regola immagine e il gioco è fatto.


-3

evitare di impostare l'interruzione di linea di UIButton su Clip , utilizzare invece il Truncate Middle standard

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.