Jak wyłączyć stan kontroli podświetlenia UIButton?

147

Mam przycisk UIButton, który po wybraniu nie powinien zmieniać stanu po dotknięciu. Domyślnym zachowaniem jest ustawienie UIControlStateHighlighted podczas dotykania, co mnie denerwuje.

Propozycje?

kbanman
źródło

Odpowiedzi:

313

Twój przycisk musi mieć buttonTypeustawiony niestandardowy.

W IB możesz odznaczyć "Podświetlenie dopasowuje obraz".

Programowo możesz użyć theButton.adjustsImageWhenHighlighted = NO;

Podobne opcje są dostępne również dla stanu „wyłączony”.

Haydn
źródło
1
Czy wiesz, jaka byłaby programowa wersja tego? W tej chwili mam to, co działa hakowo, wyłączając go i ubierając go jako wybrany.
kbanman
99
uibutton.adjustsImageWhenHighlighted = NIE;
Haydn
43
Upewnij się również, że typ przycisku jest ustawiony na CUSTOM. (Jak wspomniał Mosib Asad w innej odpowiedzi)
Vlad Lego
Wspaniały!!! tylko mała i oczywista zmiana, którą przegapiłem !!! Ustawiłem typ klasy UIButton na MyCustomClass, ale zapomniałem zmienić ten. Więc to dawało efekt podświetlenia niewybranego przycisku. Dziękuję raz jeszcze.
Vinod Supnekar
38

Oprócz powyższej odpowiedzi o odznaczeniu „podświetlenie dostosowuje obraz” w IB, upewnij się, że typ przycisku jest ustawiony na CUSTOM.

Mosib Asad
źródło
2
To był brakujący element: guzik typu CUSTOM. Dzięki!
JOM
1
Co jeśli chciałbym zachować jako przycisk UIButton systemu? nie mogę usunąć podświetlenia dostosowuje obraz?
Amjad Husseini
36

To zadziała dla Ciebie:

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

Trzecia linia jest tutaj sztuczką ...

Działa to tak samo przy ustawianiu image / backgroundImage

Manish Ahuja
źródło
1
To działa idealnie dla mnie. adjustsImageWhenHighlightedWłaściwość UIButtonwydaje się wpływać tylko obraz tła.
Michael Thiel
Pamiętaj, że jeśli zdecydujesz się przypisać obraz do „stanu wyłączenia”, nie wywołasz metody setBackgroundImage. Zamiast tego należy wykonać następujące czynności [button setImage: image forState: UIControlStateDisabled]; Należy również pamiętać, że jak wspomniano w tym wątku, właściwość adjustsImageWhenHighlighted UIButton wpływa tylko na obraz tła.
HamasN
26
adjustsImageWhenHighlighted = NO;
KETAN
źródło
23
button.adjustsImageWhenDisabled = NO;

jest równie przydatny do nadawania własnego wyglądu wyłączonego przycisku.

Tim
źródło
5

W zależności od tego, co zmieni się z domyślnego na podświetlony stan przycisku, możesz wywołać kilka metod, aby ustawić je na to, czego potrzebujesz. Więc jeśli obraz się zmieni, możesz to zrobić

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

Jeśli tekst się zmieni, możesz to zrobić

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

inne podobne funkcje:

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

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

Dimitris
źródło
setTitleColor to wszystko, czego potrzebowałem, aby wyłączyć podświetlanie tekstu
uibutton
3

OK, oto proste rozwiązanie, jeśli to działa dla Ciebie, po tygodniu uderzania głową w to w końcu przyszło mi do głowy, że po prostu ustawiłem podświetloną = NIE dla pierwszej linii metody IBAction dla TouchUpInside lub TouchDown, lub cokolwiek działa. Dla mnie było dobrze na TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
therealbuckley
źródło
3

Dla Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
źródło
3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
yuanjilee
źródło
2

tylko dwie rzeczy:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
źródło
2

Miałem podobny problem i stwierdziłem, że usunięcie zaznaczenia opcji Czyści zawartość graficzną w narzędziu do tworzenia interfejsu rozwiązało mój problem

wprowadź opis obrazu tutaj

Jeff
źródło
2

ustaw przycisk Typ - „Niestandardowy” i odznacz - Podświetlony Dostosuj obraz i gotowe.

Khushboo
źródło
-3

Unikaj ustawiania UIButton's Line Break na Clip , zamiast tego użyj standardowego Truncate Middle

wprowadź opis obrazu tutaj

János
źródło