134 votes

Comment puis-je changer l'image affichée dans une UIImageView de manière programmatique ?

J'ai un IBOutlet à un UIImageView mais quand je regarde le UIImageView doc, je ne vois pas d'indications permettant de le modifier par programme. Dois-je aller chercher un UIImage de cet objet UIImageView ?

185voto

Jordan Points 14134

Si vous disposez déjà d'un IBOutlet vers un UIImageView, il vous suffit de saisir une image et d'appeler setImage sur le récepteur (UIImageView). Voici deux exemples de saisie d'une image. L'un provient du Web, et l'autre est ajouté à votre dossier Ressources dans Xcode.

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];

o

UIImage *image = [UIImage imageNamed: @"cell.png"];

Une fois que vous avez une image, vous pouvez alors définir UIImageView :

[imageView setImage:image];

La ligne ci-dessus suppose que imageView est votre IBOutlet.

C'est tout ! Si vous voulez être plus fantaisiste, vous pouvez ajouter l'image à un UIView, puis ajouter des transitions.

P.S. La gestion de la mémoire n'est pas incluse.

1 votes

Merci, mais ça ne marche pas :( J'ai supprimé l'image dans le constructeur d'interface pour que le UIImageView soit vide. Puis j'ai implémenté ceci dans la méthode viewDidLoad. Mais rien ne se passe. Le nom de l'image est spécifié correctement à 100%. Je l'ai également assigné avec setImage à la sortie. Y a-t-il autre chose que je puisse essayer ?

3 votes

Vous n'avez probablement pas connecté l'IBOutlet à la référence ViewController dans IB. Vérifiez que l'image se trouve dans le dossier Ressources.

0 votes

Je ne suis pas sûr des règles de nécro/impact sur le SO, mais je sais que cela m'a aidé à résoudre mon problème. J'utilise iOS v5.1, xcode 4.3.2.

37voto

samkass Points 2595

Notez que le fichier NIB ne relie pas toutes les IBOutlets tant que la vue n'a pas été ajoutée à la scène. Si vous connectez les choses manuellement (ce que vous pourriez faire si les choses sont dans des NIBs séparés), il est important de garder cela à l'esprit.

Ainsi, si mon contrôleur de vue de test possède un "imageView" relié par une nib, cela ne fonctionnera probablement pas :

  testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
  [self.view addSubview:testCardViewController.view];

Mais ça, oui :

  [self.view addSubview:testCardViewController.view];
  testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];

30voto

Gilall Points 171

Cela a fonctionné pour moi

[ImageViewName setImage:[UIImage imageNamed: @"ImageName.png"]];

Assurez-vous que l'ImageView est déclarée correctement dans le fichier .h et qu'elle est liée à l'élément IB.

23voto

Lukas Wiklund Points 465
imageView.image = [UIImage imageNamed:@"myImage.png"];

16voto

swiecki Points 1875

Pour les personnes qui chercheraient à résoudre leur problème sur Google, n'oubliez pas de déclarer correctement la propriété dans votre fichier d'en-tête et de synthétiser le UIImageView dans votre fichier d'implémentation... Il sera difficile de définir l'image de manière programmatique sans méthodes getter et setter.

#import <UIKit/UIKit.h>

@interface YOURCONTROLLERNAME : UIViewController {
    IBOutlet UIImageView *imageToDisplay;
}

@property (nonatomic, retain) IBOutlet UIImageView *imageToDisplay;

@end

et ensuite dans votre .m :

@implementation YOURCONTROLLERNAME

@synthesize imageToDisplay;
//etc, rest of code goes here

À partir de là, vous devriez pouvoir utiliser quelque chose comme ce qui suit pour définir votre image.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];

0 votes

Merci ! Etant nouveau dans le domaine du xcode et des iphones en général, il me manquait le YOURCONTROLLER avant l'imageToDisplay.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X