La définition de l’image UIButton génère un bouton bleu dans iOS 7

Sur iOS 6 SDK, j’ai écrit les lignes de code suivantes pour afficher une image dans un bouton:

NSURL *thumbURL2 = [NSURL URLWithSsortingng:@"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.

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 Custom Regardez l'image

Pour ce faire par programmation, ajoutez cette ligne à viewDidLoad :

 [UIButton buttonWithType:UIButtonTypeSystem]; 

Il semble qu’iOS 7 utilise l’image fournie comme masque Alpha pour afficher la couleur de la touche. Changer le type de bouton en UIButtonTypeCustom fait l’affaire (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 c’était mon cas.

Il y a de fortes chances que l’image soit là et que vous ne puissiez 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];

Swift 3:

 let image = UIImage(named: "my-image") myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal) 

Le problème est le TintColor. Par défaut, iOS émet une couleur bleue sur chaque bouton. Vous pouvez le contourner de trois manières.

  1. Changez la couleur de la teinte. [button setTintColor:[UIColor blackColor]]; Cela peut colorer votre image d’une manière que vous ne le souhaitez pas.

  2. Comme la plupart des autres suggestions, définissez l’image d’arrière-plan. [button setBackgroundImage:[UIImage...]];

  3. Ajoutez un UIImageView à votre bouton.

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];

Pour rapide:

  let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton 

J’ai eu le même problème. Sur mon storyboard, j’avais un bouton sans aucune image.

J’atsortingbuerais 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’affecte une image sur le storyboard et que je change l’image au moment de l’exécution, cela fonctionne correctement.

Vous devez toujours spécifier une image de départ sur le storyboard même si vous ne l’utilisez pas.

Cela a fonctionné pour moi

 [myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal]; 

Remarque: supprimez l’image avant de le faire.

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, seule une modification mineure est nécessaire.

 NSURL *thumbURL2 = [NSURL URLWithSsortingng:@"http://example.com/thumbs/2.jpg"]; NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2]; UIImage *thumb2 = [UIImage imageWithData:thumbData2]; [btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal]; [self.view addSubview:btn2]; 

Ce problème est appelé problème de couleur bleue du bouton dans xcode. Lorsque nous créons un bouton par code, le bouton affiche la couleur de la teinte bleue par défaut. Cela peut être résolu en assignant une couleur de teinte au noir ou au blanc en fonction de la couleur de votre cellule. Le code est le suivant:

 UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"]; UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"]; Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect]; [button setFrame:CGRectMake(52, 66, 25, 24)]; [button setBackgroundImage:closebtnimg forState:UIControlStateNormal]; [button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected]; [button setTintColor:[UIColor whiteColor]]; [cell.contentView addSubview:button]; [button addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchUpInside]; 

Vieux thread, mais je voulais carillon parce que je viens d’avoir le même problème. Le problème était juste que vous appeliez setImage lorsque vous devriez appeler setBackgroundImage.

En utilisant Xcode 9.2, aucune des solutions ci-dessus n’a fonctionné pour ce que je cherchais.

Je cherchais une solution qui me permettrait de définir des images UIControlState .normal et .selected dans le storyboard pour leur mode de rendu d’origine , mais, dans le fichier Swift, aucun littéral de chaîne ne devrait exister concernant les noms des images.

Fondamentalement, dans votre code, vous obtiendrez l’image que vous avez définie dans votre storyboard pour .normal état .normal et la restituerez sous la forme .alwaysOriginal (Identique à l’état .selected ). Ensuite, vous .selected cette image ne sera pas affecté par la teinte) pour l’état pertinent ( .normal et .selected ) de votre UIButton .

C’est ici:

 // Get your .normal image (you set via your storyboard) and render it as original let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal) // Set your normal image but this time rendered as original yourButton.setImage(unselectedImage, for: .normal) // Same for selected state let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal) yourButton.setImage(selectedImage, for: .selected) 

De cette façon, vous pouvez définir l’état de votre image de bouton et si le nom de l’image change, cela n’affectera pas votre code.

faire en sorte que la couleur de la teinte soit en clair pour tous les quatre états (par défaut, surbrillance, sélectionnée, désactivée) a fonctionné pour moi.