Unter iOS 6 SDK habe ich die folgenden Codezeilen geschrieben, um ein Bild in einer Schaltfläche anzuzeigen:
NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];
Aber jetzt mit Xcode 5 und iOS 7 funktioniert das nicht. Die Schaltfläche enthält das Bild nicht. Die Schaltfläche ist mit blauer Farbe gefüllt.
Antworten:
In iOS7 gibt es einen neuen Schaltflächentyp namens UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // Standard-Systemschaltfläche
Überprüfen Sie Ihre .xib-Datei und ändern Sie den Schaltflächentyp in Benutzerdefiniert
Fügen Sie dazu programmgesteuert folgende Zeile hinzu
viewDidLoad
:quelle
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(wobei der Schaltflächentyp in IB auf "System" eingestellt ist).Es scheint, dass iOS 7 das bereitgestellte Bild nur als Alpha-Maske zur Anzeige der Farbtonfarbe der Schaltfläche verwendet. Das Ändern des Schaltflächentyps
UIButtonTypeCustom
hat den Trick für mich erledigt (danke user716216!). Das Einstellen des Bildes als Hintergrund funktioniert nicht immer, wenn Sie bereits ein Hintergrundbild haben, wie es in meinem Fall der Fall war.quelle
Swift 3, 4, 5:
quelle
Es besteht eine gute Chance, dass das Bild vorhanden ist und Sie es einfach nicht sehen können. Versuchen Sie, den Typ der Schaltfläche in zu ändern
UIButtonTypeCustom
. Wenn dies nicht funktioniert, stellen Sie die Hintergrundfarbe der Schaltfläche auf ein[UIColor clearColor];
quelle
Das Problem ist die TintColor. Standardmäßig wirft iOS über jede Schaltfläche eine blaue Tönungsfarbe. Sie können es auf drei Arten umgehen.
Ändern Sie die Farbtonfarbe.
[button setTintColor:[UIColor blackColor]];
Dies kann Ihr Bild auf eine Weise färben, die Sie nicht möchten.Stellen Sie wie die meisten anderen Vorschläge das Hintergrundbild ein.
[button setBackgroundImage:[UIImage...]];
Fügen Sie Ihrer Schaltfläche eine UIImageView hinzu.
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
quelle
Für schnell:
quelle
Ich hatte das gleiche Problem. Auf meinem Storyboard hatte ich einen Knopf ohne Bild.
Ich würde dann das Bild im Code zuweisen.
IOS 7 kam und ich bekam viele blaue Bilder.
Die Auflösung war einfach, aber verwirrend. Wenn ich ein Bild im Storyboard zuweise und es dann zur Laufzeit ändere, funktioniert es einwandfrei.
Sie müssen immer ein Startbild im Storyboard angeben, auch wenn Sie es nicht verwenden möchten.
quelle
Das hat bei mir funktioniert
Hinweis: Entfernen Sie vorher das Frontbild.
quelle
Alter Thread, aber ich wollte mich einschalten, weil ich nur das gleiche Problem hatte. Das Problem war nur, dass Sie setImage aufrufen, wenn Sie setBackgroundImage aufrufen sollten.
quelle
Keine der angegebenen Lösungen funktionierte für mich. Wenn Sie im Storyboard kein erstes Bild festlegen, können Sie das Bild der Schaltfläche dennoch mithilfe von ändern
setBackgroundImage
.Für Ihr Beispiel ist nur eine geringfügige Änderung erforderlich.
quelle
Dieses Problem wird als blaues Farbproblem der Schaltfläche in xcode bezeichnet. Wenn wir eine Schaltfläche per Code erstellen, zeigt die Schaltfläche standardmäßig die blaue Tönungsfarbe an. Dies kann gelöst werden, indem Schwarz oder Weiß entsprechend der Farbe Ihrer Zelle eine Tönungsfarbe zugewiesen wird. Der Code lautet:
quelle
Mit Xcode 9.2 funktionierte keine der oben genannten Lösungen für das, was ich suchte.
Ich war auf der Suche nach einer Lösung , die ich eingestellt werden lassen
.normal
und im.selected
UIControlState
Innern des Storyboard für ihre Bilder ursprünglichen Wiedergabe - Modus , aber innerhalb der Swift - Datei sollten keine Stringliterale in Bezug auf die Bildnamen existieren.Grundsätzlich erhalten Sie in Ihrem Code das Bild, das Sie in Ihrem Storyboard für den
.normal
Status festgelegt haben, und rendern es erneut als.alwaysOriginal
(Gleiches für den.selected
Status). Anschließend legen Sie das Bild fest (das jetzt als Original gerendert wird und von dem es nicht betroffen ist) den Farbton) für den relevanten Zustand (.normal
und.selected
) IhresUIButton
.Hier ist es:
Auf diese Weise können Sie den Bildstatus Ihrer Schaltfläche festlegen. Wenn sich der Bildname ändert, wirkt sich dies nicht auf Ihren Code aus.
quelle
Setzen Sie in iOS 13 die Tint-Eigenschaft einfach auf Weiß, während Sie den Typ des UIButton als Benutzerdefiniert beibehalten
quelle
Das Erstellen der Farbtonfarbe als Klarfarbe für alle vier Zustände (Standard, Hervorgehoben, Ausgewählt, Deaktiviert) hat bei mir funktioniert.
quelle
Initialisieren Sie in Swift 4 Ihre
UIButton
Bilddaten und weisen Sie sie wie folgt zu:quelle