87 votes

UIImageView - Comment obtenir le nom de fichier de l'image assignée?

Est-il possible de lire le nom d'une image UIImageView actuellement stockée dans ImageView?

J'espérais que vous pourriez faire quelque chose comme ça, mais je ne l'ai pas compris.

 NSString *currentImageName = [MyIImageView getFileName];
 

110voto

Nizar Ahmed Points 391

vous pouvez utiliser la méthode setAccessibilityIdentifier pour n’importe quelle sous-classe de UIView

 UIImageView *image ;
[image setAccessibilityIdentifier:@"file name"] ;

NSString *file_name = [image accessibilityIdentifier] ;
 

91voto

Jonathan Sterling Points 11628

Nope. Vous ne pouvez pas le faire.

La raison en est que l' UIImageView instance ne pas stocker un fichier image. Il stocke un affiche un UIImage de l'instance. Lorsque vous faites une image à partir d'un fichier, vous faites quelque chose comme cela:

UIImage *picture = [UIImage imageNamed:@"myFile.png"];

Une fois que ceci est fait, il n'y a plus aucune référence au nom du fichier. L' UIImage instance contient des données, indépendamment de l'endroit où il l'a obtenu. Ainsi, l' UIImageView ne pouvait pas connaître le nom de fichier.

Aussi, même si tu le pouvais, tu n'aurais jamais obtenir le nom de fichier info à partir d'un point de vue. Qui rompt MVC.

20voto

Ben Gotow Points 7627

Non non non... en général, ces choses sont possibles. Il va tout simplement vous faire sentir comme une sale personne. Si vous devez absolument, faites ceci:

  • Créer une catégorie avec votre propre mise en œuvre de l' +imageNamed:(NSString*)imageName que des appels par le biais de la mise en œuvre existantes et utilise la technique identifié ici (Comment puis-je utiliser objc_setAssociatedObject/objc_getAssociatedObject l'intérieur d'un objet?) pour associer de façon permanente imageName avec le UIImage objet qui est retourné.

  • L'utilisation de la Méthode Swizzling de swap de la condition de la mise en œuvre de l' imageNamed: de votre mise en œuvre de la méthode de la table de recherche de l'Objective-C runtime.

  • Accès le nom que vous avez associés à la UIImage instance (à l'aide objc_getAssociatedObject) quand vous le voulez.

Je peux confirmer que cela fonctionne, avec la mise en garde que vous ne pouvez pas obtenir les noms des UIImage est chargé des Plumes. Il semble que les images chargées à partir de Plumes ne sont pas créés par le biais de toute norme appels de fonction, donc c'est vraiment un mystère pour moi.

Je pars de la mise en œuvre jusqu'à vous. Copier-coller du code de la vis avec l'Objective-C runtime est une très mauvaise idée, donc réfléchissez bien à vos besoins du projet et de mettre en œuvre ce que si vous devez.

11voto

WendiKidd Points 2413

Il n'est pas natif façon de le faire; cependant, vous pouvez facilement créer ce problème vous-même.

Vous pouvez sous-classe UIImageView et ajouter une nouvelle variable d'instance:

NSString* imageFileName;

Ensuite, vous pouvez remplacer setImage, le premier paramètre imageFileName pour le nom de fichier de l'image, de la configuration, puis en appelant [super setImage:imageFileName]. Quelque chose comme ceci:

-(void) setImage:(NSString*)fileName
{
   imageFileName = fileName;
   [super setImage:fileName];
}

Juste parce qu'il ne peut pas être fait en natif ne signifie pas qu'il n'est pas possible :)

10voto

Kenny Winker Points 6171

Nan. Pas moyen de faire ça nativement. Vous devrez sous-classer UIImageView et ajouter une propriété imageFileName (que vous définissez lorsque vous définissez l'image).

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