85

UIImageView's UIImage に現在格納されている の名前を読み取ることはできUIImageViewますか?

私はあなたがこのような何かをすることができると思っていましたが、それを理解していません.

NSString *currentImageName = [MyIImageView getFileName];
4

16 に答える 16

110

UIView の任意のサブクラスに setAccessibilityIdentifier メソッドを使用できます

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

NSString *file_name = [image accessibilityIdentifier] ;
于 2012-09-04T11:19:29.943 に答える
91

いいえ。そんなことはできません。

これは、UIImageViewインスタンスがイメージ ファイルを保存しないためです。UIImageディスプレイのインスタンスを格納します。ファイルから画像を作成するときは、次のようにします。

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

これが完了すると、ファイル名への参照はなくなります。UIImageインスタンスには、どこから取得したかに関係なく、データが含まれています。したがって、 はUIImageViewおそらくファイル名を知ることができませんでした。

また、できたとしても、ビューからファイル名情報を取得することはできません。それはMVCを壊します。

于 2009-11-16T05:39:51.213 に答える
11
if ([imageForCheckMark.image isEqual:[UIImage imageNamed:@"crossCheckMark.png"]]||[imageForCheckMark.image isEqual:[UIImage imageNamed:@"checkMark.png"]])
{

}
于 2013-02-19T11:03:44.757 に答える
11

これを行うネイティブな方法はありません。ただし、この動作は自分で簡単に作成できます。

新しいインスタンス変数をサブクラス化UIImageViewして追加できます。

NSString* imageFileName;

次にsetImage、最初に設定imageFileNameしている画像のファイル名に設定してから、を呼び出すことができます[super setImage:imageFileName]。このようなもの:

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

ネイティブにできないからといって、それができないわけではありません:)

于 2012-05-22T01:26:10.450 に答える
10

いいえ。それをネイティブで行う方法はありません。UIImageView をサブクラス化し、imageFileName プロパティ (画像の設定時に設定) を追加する必要があります。

于 2009-11-16T05:37:55.897 に答える
8

UIImage ではなく UIImageView は、ロードされた画像のファイル名を保持しません。

次のいずれかを実行できます

1: (上記の Kenny Winker が提案したように) UIImageView をサブクラス化して fileName プロパティを持つか、

2: 画像ファイルに番号を付けて (image1.jpg、image2.jpg など)、それらの画像に対応する番号のタグを付けます (image1.jpg の場合は tag=1、image2.jpg の場合は tag=2 など)。

3: UIImageView の画像を更新するたびに更新されるクラス レベルの変数 (例: NSString *currentFileName) を用意します。

于 2009-12-17T22:27:02.180 に答える
4

このコードはあなたを助けます:-

- (NSString *)getFileName:(UIImageView *)imgView{
    NSString *imgName = [imgView image].accessibilityIdentifier;
    NSLog(@"%@",imgName);
    return imgName;
}

これを次のように使用します:-

NSString *currentImageName = [self getFileName:MyIImageView];
于 2013-05-29T22:39:55.910 に答える
3

imagename を UImageView に関連付けるために、目的の c ランタイム機能を使用できます。

#import <objc/runtime.h>クラスの最初のインポート

次に、以下のようにコードを実装します。

NSString *filename = @"exampleImage";
UIImage *image = [UIImage imagedName:filename];
objc_setAssociatedObject(image, "imageFilename", filename, OBJC_ASSOCIATION_COPY);
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
//You can then get the image later:
NSString *filename = objc_getAssociatedObject(imageView, "imageFilename");

お役に立てば幸いです。

于 2013-12-20T09:32:50.703 に答える
3

はい、以下のコードのようなデータの助けを借りて比較できます

UITableViewCell *cell = (UITableViewCell*)[self.view viewWithTag:indexPath.row + 100];

UIImage *secondImage = [UIImage imageNamed:@"boxhover.png"];

NSData *imgData1 = UIImagePNGRepresentation(cell.imageView.image);
NSData *imgData2 = UIImagePNGRepresentation(secondImage);

BOOL isCompare =  [imgData1 isEqual:imgData2];
if(isCompare)
{
    //contain same image
    cell.imageView.image = [UIImage imageNamed:@"box.png"];
}
else
{
    //does not contain same image
    cell.imageView.image = secondImage;
}
于 2014-10-13T07:01:30.887 に答える
0

私はこの問題に対処しました.MVCデザインパターンによって解決されました.Cardクラスを作成しました:

@interface Card : NSObject

@property (strong,nonatomic) UIImage* img;

@property  (strong,nonatomic) NSString* url;

@end

//次に、実行UIViewControllerするDidLoadメソッドで:

// init Cards
Card* card10= [[Card alloc]init];
card10.url=@"image.jpg";  
card10.img = [UIImage imageNamed:[card10 url]];

// 例えば

UIImageView * myImageView = [[UIImageView alloc]initWithImage:card10.img];
[self.view addSubview:myImageView];

//画像名を確認したい場合は、次のようにします。

//例えば

 NSString * str = @"image.jpg";

 if([str isEqualToString: [card10 url]]){
 // your code here
 }
于 2013-06-02T18:07:05.503 に答える