Dieser hat mich verblüfft.
Ist es überhaupt möglich, die Hintergrundfarbe eines UIButton in Cocoa für iPhone zu ändern? Ich habe versucht, die Hintergrundfarbe einzustellen, aber sie ändert nur die Ecken. setBackgroundColor:
scheint die einzige verfügbare Methode für solche Dinge zu sein.
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
objective-c
iphone
cocoa-touch
uibutton
Dubbeat
quelle
quelle
Antworten:
Dies kann programmgesteuert erfolgen, indem eine Replik erstellt wird:
edit: natürlich müsstest du
#import <QuartzCore/QuartzCore.h>
Bearbeiten: Für alle neuen Leser sollten Sie auch einige Optionen in Betracht ziehen, die als "eine andere Möglichkeit" hinzugefügt wurden. für Sie Überlegung.
Da dies eine alte Antwort ist, empfehle ich dringend, Kommentare zur Fehlerbehebung zu lesen
quelle
Ich habe einen anderen Ansatz,
Von CommonUIUtility,
Vergiss es nicht
#import <QuartzCore/QuartzCore.h>
quelle
btFind.layer.borderWidth = 1;
setBackgroundColor:(UIColor *) forState:(UIControlState)
.Ich nehme an, Sie sprechen von einem UIButton mit
UIButtonTypeRoundedRect
? Sie können die Hintergrundfarbe davon nicht ändern. Wenn Sie versuchen, die Hintergrundfarbe zu ändern, ändern Sie eher die Farbe des Rechtecks, auf das die Schaltfläche gezeichnet ist (was normalerweise klar ist). Es gibt also zwei Möglichkeiten. Entweder unterklassifizieren Sie UIButton und überschreiben seine-drawRect:
Methode, oder Sie erstellen Bilder für die verschiedenen Schaltflächenzustände (was vollkommen in Ordnung ist).Wenn Sie die Hintergrundbilder in Interface Builder festlegen, sollten Sie beachten, dass IB das Festlegen von Bildern nicht für alle Zustände unterstützt, die die Schaltfläche haben kann. Ich empfehle daher, die Bilder in Code wie folgt festzulegen:
Die letzte Zeile zeigt, wie ein Bild für den ausgewählten und hervorgehobenen Status festgelegt wird (das ist derjenige, den IB nicht festlegen kann). Sie benötigen die ausgewählten Bilder (Zeile 4 und 6) nicht, wenn Sie auf der Schaltfläche keinen ausgewählten Status benötigen.
quelle
CGContextSetFillColorWithColor
undCGContextFillPath
füllenCGContextAddArcToPoint
.forState:(UIControlStateHighlighted | UIControlStateSelected)
Prost.Andere Möglichkeit:
Die Schaltfläche ist jedoch quadratisch, und das ist nicht das, was wir wollen. Erstellen Sie ein IBOutlet mit einem Verweis auf diese Schaltfläche und fügen Sie der viewDidLoad-Methode Folgendes hinzu:
Vergessen Sie nicht, QuartzCore.h zu importieren
quelle
Unterklasse UIButton und überschreiben die Methoden setHighlighted und setSelected
Meine darkerShade-Methode gehört zu einer solchen UIColor-Kategorie
quelle
Wenn Sie keine Bilder verwenden möchten und diese genau wie der abgerundete Rechteck-Stil aussehen sollen, versuchen Sie dies. Platzieren Sie einfach eine UIView über dem UIButton mit einem identischen Rahmen und einer Maske mit automatischer Größenänderung, setzen Sie das Alpha auf 0,3 und setzen Sie den Hintergrund auf eine Farbe. Verwenden Sie dann das folgende Snippet, um die abgerundeten Kanten von der farbigen Überlagerungsansicht abzuschneiden. Deaktivieren Sie außerdem das Kontrollkästchen "Benutzerinteraktion aktiviert" in IB in der UIView, damit Berührungsereignisse auf den darunter liegenden UIButton übertragen werden können.
Ein Nebeneffekt ist, dass Ihr Text auch eingefärbt wird.
quelle
Eine andere Möglichkeit (das beste und schönste imho):
Erstellen Sie in Interface Builder ein UISegmentedControl mit 2 Segmenten in der erforderlichen Hintergrundfarbe. Setzen Sie den Typ auf 'bar'. Ändern Sie es dann in nur ein Segment. Der Interface Builder akzeptiert kein Segment, daher müssen Sie dies programmgesteuert tun.
Erstellen Sie daher ein IBOutlet für diese Schaltfläche und fügen Sie dieses dem viewDidLoad Ihrer Ansicht hinzu:
Jetzt haben Sie einen schönen glänzenden, farbigen Knopf mit der angegebenen Hintergrundfarbe. Verwenden Sie für Aktionen das Ereignis 'Wert geändert'.
(Ich habe dies auf http://chris-software.com/index.php/2009/05/13/creating-a-nice-glass-buttons/ gefunden ). Danke Chris!
quelle
Ich bin mir zu 99% sicher, dass Sie nicht einfach die Hintergrundfarbe eines UIButton ändern können. Stattdessen müssen Sie die Hintergrundbilder selbst ändern, was ich für schmerzhaft halte. Ich bin erstaunt, dass ich das tun musste.
Wenn ich falsch liege oder wenn es einen besseren Weg gibt, ohne Hintergrundbilder einstellen zu müssen, lassen Sie es mich bitte wissen
quelle
Gemäß dem Vorschlag von @EthanB und dem Erstellen eines von hinten gefüllten Rechtecks durch @karim habe ich gerade eine Kategorie für den UIButton erstellt, um dies zu erreichen.
Geben Sie einfach den Kategoriecode ein: https://github.com/zmonteca/UIButton-PLColor
Verwendung:
Optionale Verwendung für Staaten:
quelle
Sie können der Schaltfläche auch einen CALayer hinzufügen - Sie können viele Dinge damit tun, einschließlich einer Farbüberlagerung. In diesem Beispiel wird eine einfache Farbebene verwendet, mit der Sie die Farbe auch leicht abstufen können. Beachten Sie jedoch, dass hinzugefügte Ebenen die darunter liegenden Ebenen verdecken
quelle
ein zweites Ziel für das hinzufügen
UIButton
fürUIControlEventTouched
und ändernUIButton
Hintergrundfarbe. Ändern Sie es dann wieder imUIControlEventTouchUpInside
Ziel.quelle
Für professionelle und gut aussehende Schaltflächen können Sie diese benutzerdefinierte Schaltflächenkomponente überprüfen . Sie können es direkt in Ihren Ansichten und Tabellenansichten verwenden oder den Quellcode so ändern, dass er Ihren Anforderungen entspricht. Hoffe das hilft.
quelle
Dies ist nicht so elegant wie das Unterordnen von UIButton. Wenn Sie jedoch nur etwas schnelles möchten - ich habe eine benutzerdefinierte Schaltfläche erstellt, dann ein 1 x 1 Pixel großes Bild mit der Farbe, die die Schaltfläche haben soll, und den Hintergrund festgelegt der Schaltfläche zu diesem Bild für den hervorgehobenen Zustand - funktioniert für meine Bedürfnisse.
quelle
Ich weiß, dass dies vor langer Zeit gefragt wurde und jetzt gibt es ein neues UIButtonTypeSystem. Neuere Fragen werden jedoch als Duplikate dieser Frage markiert. Hier ist meine neuere Antwort im Kontext einer iOS 7-Systemschaltfläche. Verwenden Sie die
.tintColor
Eigenschaft.quelle
[myButton setBackgroundColor:[UIColor blueColor]]; [myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
Es ist möglich, auf diese Weise zu ändern oder das Storyboard aufzurufen und den Hintergrund für die Optionen auf der rechten Seite zu ändern.
quelle
Swift 3:
quelle