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?

kbanman
quelle

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.

Haydn
quelle
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.

Mosib Asad
quelle
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

Manish Ahuja
quelle
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
26
adjustsImageWhenHighlighted = NO;
KETAN
quelle
23
button.adjustsImageWhenDisabled = NO;

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

Tim
quelle
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

Dimitris
quelle
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.

}
therealbuckley
quelle
3

Für schnelle Entwickler -

yourButton.adjustsImageWhenHighlighted = false
iDeveloper
quelle
3

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
Yuanjilee
quelle
2

nur zwei Dinge:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
Alok
quelle
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

Jeff
quelle
2

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

Khushboo
quelle
-3

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

Geben Sie hier die Bildbeschreibung ein

János
quelle