Wie deaktiviere ich den Highlight-Steuerungsstatus eines UIButton?


147

Ich habe einen UIButton, der bei Auswahl den Status nicht ändern sollte, wenn er berührt wird. Das Standardverhalten ist, dass es sich in UIControlStateHighlighted befindet, während es berührt wird, und das macht mich wütend.

Vorschläge?

Antworten:


313

Ihre Schaltfläche muss buttonTypeauf Benutzerdefiniert eingestellt sein.

In IB können Sie "Markierung passt Bild an" deaktivieren.

Programmatisch können Sie verwenden theButton.adjustsImageWhenHighlighted = NO;

Ähnliche Optionen sind auch für den Status "Deaktiviert" verfügbar.


1
Gibt es eine Chance, dass Sie wissen, wie die programmatische Version davon aussehen würde? Im Moment funktioniert es hackisch, indem es deaktiviert und als ausgewählt verkleidet wird.
Kbanman

99
uibutton.adjustsImageWhenHighlighted = NO;
Haydn

43
Stellen Sie außerdem sicher, dass der Schaltflächentyp auf BENUTZERDEFINIERT eingestellt ist. (Wie Mosib Asad in einer anderen Antwort erwähnte)
Vlad Lego

Toll!!! nur eine kleine und offensichtliche Änderung, die ich verpasst habe !!! Ich hatte den UIButton-Klassentyp auf MyCustomClass gesetzt, aber vergessen, diesen zu ändern. Es wurde also ein nicht ausgewählter hervorgehobener Effekt erzielt. Vielen Dank noch mal.
Vinod Supnekar

38

Stellen Sie zusätzlich zu der obigen Antwort auf das Deaktivieren von "Hervorheben passt das Bild an" in IB sicher, dass der Schaltflächentyp BENUTZERDEFINIERT eingestellt ist.


2
Dies war das fehlende Stück: Knopf Typ CUSTOM. Danke!
JOM

1
Was ist, wenn ich als System-UIButton behalten möchte? Kann ich die Markierung nicht entfernen, um das Bild anzupassen?
Amjad Husseini

36

Dies wird für Sie funktionieren:

[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. Zeile ist der Trick hier ...

Dies funktioniert genauso für das Festlegen von image / backgroundImage


1
Das funktioniert perfekt für mich. Die adjustsImageWhenHighlightedEigenschaft von UIButtonscheint nur das Hintergrundbild zu beeinflussen.
Michael Thiel

Beachten Sie, dass Sie setBackgroundImage nicht aufrufen, wenn Sie ein Bild dem Status "Deaktiviert" zuweisen möchten. Führen Sie stattdessen die folgenden Schritte aus: [button setImage: image forState: UIControlStateDisabled]; Beachten Sie auch, dass, wie in diesem Thread erwähnt, die Eigenschaft adjustsImageWhenHighlighted UIButton nur das Hintergrundbild beeinflusst.
HamasN


23
button.adjustsImageWhenDisabled = NO;

ist gleichermaßen nützlich, um eine deaktivierte Schaltfläche selbst anzuzeigen.


5

Abhängig davon, was sich vom Standardzustand zum hervorgehobenen Status der Schaltfläche ändert, können Sie verschiedene Methoden aufrufen, um sie auf die gewünschten Einstellungen festzulegen. Wenn sich das Bild ändert, können Sie dies tun

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

Wenn sich der Text ändert, können Sie dies tun

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

andere ähnliche Funktionen:

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

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


setTitleColor ist alles, was ich brauche, um die Hervorhebung von Uibuttons Text zu deaktivieren
atulkhatri

3

OK, hier ist eine einfache Lösung, wenn dies für Sie funktioniert. Nachdem ich eine Woche lang mit dem Kopf darauf geschlagen hatte, kam mir schließlich der Gedanke, für die erste Zeile der IBAction-Methode für TouchUpInside oder TouchDown oder was auch immer funktioniert, einfach hervorgehoben = NEIN zu setzen. Für mich war es auf dem TouchUpInside in Ordnung.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

3

Für schnelle Entwickler -

yourButton.adjustsImageWhenHighlighted = false

3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

nur zwei Dinge:

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

2

Ich hatte ein ähnliches Problem und stellte fest, dass das Deaktivieren des Kontrollkästchens "Grafikinhalt löschen" im Interface Builder mein Problem behoben hat

Geben Sie hier die Bildbeschreibung ein


2

Machen Sie Ihre Schaltfläche Typ - "Benutzerdefiniert" und Deaktivieren - Markiert Bild anpassen und Sie sind fertig.


-3

vermeiden UIButton die festlegen Zeilenumbruch Clip , verwenden Sie stattdessen den Standard Kürzen Mittel

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.