Sur le SDK iOS 6, j'ai écrit les lignes de code suivantes pour afficher une image à l'intérieur d'un bouton:
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];
Mais maintenant, avec Xcode 5 et iOS 7, cela ne fonctionne pas. Le bouton ne contient pas l'image. Le bouton est rempli de couleur bleue.
Réponses:
Dans iOS7, il existe un nouveau type de bouton appelé UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // bouton système standard
Vérifiez votre fichier .xib et changez le type de bouton en Personnalisé
Pour ce faire par programme, ajoutez cette ligne au
viewDidLoad
:la source
[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];
(avec le type de bouton réglé sur "Système" dans IB).Il semble que iOS 7 utilise l'image fournie comme un masque Alpha pour afficher la couleur de teinte du bouton. Changer le type de bouton a
UIButtonTypeCustom
fait l'affaire pour moi (merci user716216!). Définir l'image comme arrière-plan ne fonctionne pas toujours si vous avez déjà une image d'arrière-plan, comme ce fut mon cas.la source
Swift 3, 4, 5:
la source
Il y a de fortes chances que l'image soit là et que vous ne puissiez tout simplement pas la voir. Essayez de changer le type du bouton en
UIButtonTypeCustom
. Si cela ne fonctionne pas, définissez la couleur d'arrière-plan du bouton sur[UIColor clearColor];
la source
Le problème est le TintColor. Par défaut, iOS jette une teinte bleue sur chaque bouton. Vous pouvez le contourner de 3 façons.
Changez la couleur de la teinte.
[button setTintColor:[UIColor blackColor]];
Cela peut colorer votre image d'une manière dont vous ne le souhaitez pas.Comme la plupart des autres l'ont suggéré, définissez l'image d'arrière-plan.
[button setBackgroundImage:[UIImage...]];
Ajoutez un UIImageView à votre bouton.
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
la source
Pour rapide:
la source
J'ai eu le même problème. Sur mon storyboard, j'avais un bouton sans aucune image.
J'attribuerais alors l'image dans le code.
IOS 7 est arrivé et j'ai eu beaucoup d'images bleues.
La résolution était simple mais déroutante. Si j'attribue une image sur le storyboard, puis que je change l'image au moment de l'exécution, cela fonctionne bien.
Vous devez toujours spécifier une image de départ sur le storyboard même si vous n'allez pas l'utiliser.
la source
Cela a fonctionné pour moi
Remarque: retirez l'image de devant avant de faire cela.
la source
Vieux fil, mais je voulais intervenir parce que j'avais juste le même problème. Le problème était simplement que vous appelez setImage lorsque vous devez appeler setBackgroundImage.
la source
Aucune des solutions proposées ne fonctionnait pour moi. Si vous ne définissez pas d'image initiale dans Storyboard, vous pouvez toujours modifier l'image du bouton à l'aide de
setBackgroundImage
.Pour votre exemple, seul un changement mineur est nécessaire.
la source
Ce problème est appelé problème de couleur bleue du bouton dans xcode. Lorsque nous créons bouton par code, le bouton affiche la couleur de teinte bleue par défaut, ce qui peut être résolu en attribuant une couleur de teinte au noir ou au blanc en fonction de la couleur de votre cellule. Le code est:
la source
En utilisant Xcode 9.2, aucune des solutions ci-dessus n'a fonctionné pour ce que je recherchais.
Je cherchais une solution qui me permettrait de définir
.normal
et des.selected
UIControlState
images à l'intérieur du storyboard pour leur mode de rendu d'origine , mais, à l'intérieur du fichier Swift, aucune chaîne littérale ne devrait exister concernant les noms d'image.Fondamentalement, à l'intérieur de votre code, vous obtiendrez l'image que vous avez définie dans votre storyboard pour l'
.normal
état et la restituerez comme.alwaysOriginal
(Identique pour l'.selected
état), puis vous définirez cette image (qui est maintenant rendue comme originale et ne sera pas affectée par la teinte) pour l'état concerné (.normal
et.selected
) de votreUIButton
.C'est ici:
De cette façon, vous pouvez définir les états de l'image de votre bouton et si le nom de l'image change, cela n'affectera pas votre code.
la source
Dans iOS 13 - définissez simplement la propriété Tint sur Blanc, tout en conservant le type de UIButton comme Personnalisé
la source
rendre la couleur de la teinte comme une couleur claire pour les quatre états (par défaut, surligné, sélectionné, désactivé) a fonctionné pour moi.
la source
Dans Swift 4 , initialisez
UIButton
et attribuez vos données d'image comme suit:la source