2013-04-12 2 views
28

Ich habe eine benutzerdefinierte UIButton, die eine Wolke ist, transparent schwarz und weiß. Png-Datei, ohne Down-Status, nur ein Bild. Wenn Sie den Finger darüber tippen und halten, wird er dunkelgrau. Ich versuche, das Dunkelgrau zu etwas weniger Bedrückendem zu verändern. Die Schaltfläche ist in einer Ansicht nicht sichtbar, nicht in einer Registerkartenleiste, einer Symbolleiste oder einem Navigationscontroller.Ändern Sie die Farbe der dunkelgrauen Hervorhebung, wenn Sie benutzerdefinierte UIButton gedrückt halten?

Ich habe schon versucht Einstellung tintColor (was die Dokumentation hilfreich informiert mich ist nur für 'einige' Arten von Tasten, die keine Angabe, welche).

Ich habe auch versucht, alles zu ändern, was ich in Interface Builder in Bezug auf Highlight-Farben, Standardzustände, etc. finden kann. Nichts hat überhaupt einen Unterschied gemacht.

Ich habe sogar versucht, das eigene Bild des Knopfes für seinen UIControlStateHighlighted Staat einzustellen, aber selbst dieses verursacht das dunkelgraue Überlagern, wenn ich meinen Finger darüber halte.

Wie kann ich diese Farbe ändern? Ich habe mir hier auf SO viele andere Themen angeschaut und konnte keine Lösung finden, die für mich funktioniert. Jede Hilfe würde sehr geschätzt werden!

EDIT: Ich löste das Problem, eine Kategorie von UIImage verwendet, die eine Methode hinzufügt, die CoreGraphics verwendet eine Tönung auf einen dargebotenen UIImage anzuwenden. Ich habe dann dieses Bild als Höhepunkt gesetzt, und alles ist gut. Scheint eine Menge Reifen, um eine Farbe zu ändern, die Apple uns hätte ändern lassen sollen, aber c'est la vie.

Antwort

55

Sie haben angegeben, dass Sie ein benutzerdefiniertes Bild für den Status UIControlStateHighlighted festgelegt haben. Dieses sollte das Standardverhalten deaktivieren.

Wenn Sie weiterhin Probleme haben, können Sie diesen Effekt deaktivieren, indem Sie die Eigenschaft auf NO setzen und den von Ihnen gewünschten benutzerdefinierten Effekt verwenden.

+0

Dank. Wird in 10 Minuten akzeptieren, wenn es mich lässt .. – Luke

+0

Ich habe gerade einen Schnitt gemacht: ein benutzerdefiniertes Bild für 'UIControlStateHighlighted' sollte wirklich funktionieren. Ich würde es nochmal versuchen und sicherstellen, dass du keinen Fehler gemacht hast. –

+0

Ich denke, es wird eingestellt, aber es wird nicht richtig gestreckt. Ich mache ein paar Dinge mit der Größe des Bildes, basierend auf dem darin enthaltenen Text. Es zeigt die Mitte als weiß, aber das Dunkelgrau um die Außenseiten herum, so dass das Bild den Raum des Originals nicht füllt. Was ist seltsam, da ich es auf sich selbst setze. – Luke

1

Ich hatte ein ähnliches Problem mit einer benutzerdefinierten UIButton, wenn die Schaltfläche bei jedem Drücken in grau hervorgehoben wurde. Ich löste dieses Problem durch Subklassen UIButton und bei der Umsetzung overrode ich eine einzige Methode, (void) setHighlighted: Methode und hielt es leer:

- (void)setHighlighted:(BOOL)highlighted 
{ 
    // Leave empty to prevent super from doing whatever 
    // that it is doing to show the grey highlight. 
} 

, dass jede Art gestoppt hervorzuheben, da ich nicht alles in dem Verfahren zu tun wurde . Es ist ein besserer Ansatz, wenn Sie nur versuchen, den Hervorhebungseffekt zu entfernen.

Erstellen Sie in Ihrem Code eine Unterklasse von UIButton, überschreiben Sie die setHighlighted-Methode und machen Sie dann Ihre benutzerdefinierte Schaltfläche zu einer Unterklasse dieser benutzerdefinierten Klasse.

+0

Vielleicht macht der Super auch mehr als nur mit der Farbveränderung zu tun. Wäre vorsichtig, dies zu tun. – Yavin4

29

Wenn adjustImageWhenHighlighted = NO nicht funktioniert, Button-Type auf Benutzerdefiniert (IB oder programmgesteuert) setzen.

Standard Button-Type: System, ändert das Verhalten der hervorgehobenen Schaltfläche.

+0

Ich weiß nicht, wie ich das verpasst habe. Vielen Dank. –

+0

Du hast mein Leben gerettet. Der Standardtyp von Interface Builder für UIButton ist 'system'. Wirklich seltsam, oder? –

3

Swift 3:

myButton.adjustsImageWhenHighlighted = false 
0

Sie können eine benutzerdefinierte Schaltfläche schreiben, die es tut

class ActionButton: UIButton { 

    var originalBackgroundColor: UIColor! 

    override var backgroundColor: UIColor? { 
    didSet { 
     if originalBackgroundColor == nil { 
     originalBackgroundColor = backgroundColor 
     } 
    } 
    } 

    override var isHighlighted: Bool { 
    didSet { 
     guard let originalBackgroundColor = originalBackgroundColor else { 
     return 
     } 

     backgroundColor = isHighlighted ? originalBackgroundColor.darken() : originalBackgroundColor 
    } 
    }