UIImageView - Comment obtenir le nom de fichier de l'image affectée?
Est-il possible de lire le nom d'un UIImageView's
UIImage
c'est actuellement stocké dans le UIImageView
?
J'espérais que vous pourriez faire quelque chose de gentil comme ça, mais je n'ai pas pensé à elle.
NSString *currentImageName = [MyIImageView getFileName];
Vous devez vous connecter pour publier un commentaire.
Nope. Vous ne pouvez pas le faire.
La raison en est que
UIImageView
exemple, n'a pas stocker un fichier image. Il stocke un affiche unUIImage
instance. Lorsque vous faites une image à partir d'un fichier, vous faites quelque chose comme cela:Une fois que ceci est fait, il n'y a plus aucune référence au nom du fichier. Le
UIImage
instance contient des données, indépendamment de l'endroit où il l'a obtenu. Ainsi, laUIImageView
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.
vous pouvez utiliser setAccessibilityIdentifier méthode pour toute sous-classe de UIView
localize
méthode qui va tout simplement à travers les images et fait de la regex sur le nom de l'image (j'ai eu de très bonnes raisons pour faire ces images images réelles plutôt que de créer un custom made UIImage).. je me demandais si il y avait un meilleur moyen le plus propre de la localisation des images en objective-c.. car tout le monde parle de MVC et ce n'est pasaccessibilityDescription
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
+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?) à associer de façon permanenteimageName
avec le UIImage objet qui est retourné.Utilisation Méthode Swizzling de swap de la condition de la mise en œuvre de
imageNamed:
de mise en œuvre de la méthode de la table de recherche de l'Objective-C runtime.D'accès le nom que vous avez associés à la UIImage instance (à l'aide objc_getAssociatedObject) à chaque fois que vous le souhaitez.
Je peux vérifier 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.
UIImage
de remplacer une méthode?+imageNamed:(NSString*)imageName { // save file name in new property or whatever [self imageNamed:imageName]; // infinite loop [super imageNamed:imageName]; // super doesn't contain such a method }
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:Alors vous pourriez remplacer
setImage
, le premier paramètreimageFileName
pour le nom de fichier de l'image, de la configuration, et puis l'appel de[super setImage:imageFileName]
. Quelque chose comme ceci:Juste parce qu'il ne peut pas être fait en natif ne signifie pas qu'il n'est pas possible 🙂
hot dog
ounot hotdog
.Nope. Aucun moyen de le faire nativement.
Vous allez à la sous-classe UIImageView, et d'ajouter une imageFileName propriété (que vous définissez lorsque vous définissez l'image).
Ni UIImageView pas UIImage tient le nom de fichier de l'image chargée.
Vous pouvez soit
1: (comme suggéré par Kenny Winker ci-dessus) sous-classe UIImageView d'avoir un nom de fichier de la propriété ou
2: nom de l'image des fichiers avec des nombres (image1.jpg, image2.jpg etc) et la balise de ces images avec le nombre correspondant (balise=1 pour image1.jpg, tag=2 pour image2.jpg etc) ou
3: Avoir un niveau de classe de la variable (par exemple. NSString *currentFileName) qui met à jour chaque fois que vous mettez à jour le UIImageView l'image de
Ce code va vous aider:-
L'utiliser comme:-
[image setAccessibilityIdentifier:@"demoFileName.png"] ;
et ensuite appeler cette méthodeOui, vous pouvez comparer avec l'aide de données comme ci-dessous code
Vous pouvez utiliser objective-c Runtime fonctionnalité pour l'association imagename avec le UImageView.
D'abord importer
#import <objc/runtime.h>
dans votre classepuis de mettre en œuvre votre code comme ci-dessous :
Espère que cela vous aide.
Ou vous pouvez utiliser la restauration de l'identificateur, comme ceci:
Fondamentalement à cette solution, vous êtes à l'aide de la restauration de l'identificateur de tenir l'image du nom, de sorte que vous pouvez l'utiliser plus tard, n'importe où. Si vous mettez à jour l'image, vous devez également mettre à jour l'identificateur de restauration, comme ceci:
J'espère que vous aide, bonne chance!
Obtenir le nom de l'image Swift 4.2
Il y a un moyen si vous voulez comparer l'image du bouton noms que vous avez dans les actifs.
D'abord définir la accessibilityIdentifier comme imageName
Alors Utiliser le code suivant.
Enfin, l'appel de La manière de la méthode pour identifier
Je dois faire face à ce problème, j'ai été résolu par le modèle de conception MVC, j'ai créé la catégorie de Carte:
//puis dans la
UIViewController
dans leDidLoad
Méthode pour ce Faire ://par Exemple
//peut vous voulez vérifier le nom de l'image , de sorte que vous pouvez le faire:
//par exemple
utilisation ci-dessous
Le code du travail est en swift3 - écrire le code à l'intérieur de didFinishPickingMediaWithInfo délégué méthode:
NSURL {