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.