web-dev-qa-db-fra.com

Définition des résultats d'image UIButton dans le bouton bleu sous iOS 7

Sur iOS 6 SDK, 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.

155
user2665539

Dans iOS7, 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é. Look at the image

Pour ce faire par programme, ajoutez cette ligne à la viewDidLoad:

[UIButton buttonWithType:UIButtonTypeSystem]; 
368
Chamira Fernando

Il semble que iOS 7 utilise l'image fournie à titre de masque Alpha pour afficher la couleur de la teinte du bouton . Changer le type de bouton en UIButtonTypeCustom a joué un rôle clé (merci utilisateur716216!) ..__ Ne travaillez pas toujours si vous avez déjà une image d’arrière-plan, comme c’était mon cas.

53
user3099609

Il y a de bonnes 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];

21
Mick MacCallum

Swift 3:

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

Pour Swift:

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

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

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

  2. Comme la plupart des autres l'ont suggéré, 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];

8
DrDisc

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

Je voudrais ensuite assigner 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'assigne une image sur le storyboard et que je change ensuite 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 ne l'utilisez pas.

6
Ryan Heitner

Cela a fonctionné pour moi

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

Remarque: supprimez l'image avant avant de procéder.

2
datha

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

Je recherchais une solution qui me permettrait de définir les images .normal et .selectedUIControlState dans le storyboard pour leur mode de rendu original , mais, dans le fichier Swift, il ne devrait pas exister de chaînes littérales concernant les noms des images.

Fondamentalement, dans votre code, vous obtiendrez l’image que vous définissez dans votre storyboard pour l’état .normal et vous la restiturez sous la forme .alwaysOriginal (idem pour l’état .selected), puis vous définissez cette image être affecté par la teinte) pour l’état concerné (.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 les états d'image des boutons et si le nom de l'image change, cela n'affectera pas votre code.

1
OhadM

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

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];
1
Shane

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.

NSURL *thumbURL2 = [NSURL URLWithString:@"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];
1
Alex

Vieux fil, mais je voulais ajouter quelque chose parce que je viens d'avoir le même problème. Le problème était simplement que vous appeliez setImage alors que vous deviez appeler setBackgroundImage.

1
Rob Schlackman

faire de la couleur de teinte une couleur claire pour les quatre états (par défaut, en surbrillance, sélectionné, désactivé) a fonctionné pour moi.

0
Rajashekar

Dans Swift 4 , initialisez votre UIButton et affectez vos données d’image comme suit:

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
0
xscoder