[ios] UIImageView-할당 된 이미지의 파일 이름을 얻는 방법은 무엇입니까?

의 이름을 읽을 수 있습니까? UIImageView's UIImage
현재 저장된의UIImageView 있습니까?

당신이 이런 일을 할 수 있기를 바랐지만 아직 알아 내지 못했습니다.

NSString *currentImageName = [MyIImageView getFileName];



답변

아니. 당신은 그렇게 할 수 없습니다.

그 이유는 UIImageView인스턴스가 이미지 파일을 저장하지 않기 때문입니다 . 디스플레이 UIImage인스턴스를 저장 합니다. 파일에서 이미지를 만들 때 다음과 같이합니다.

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

이 작업이 완료되면 더 이상 파일 이름에 대한 참조가 없습니다. UIImage인스턴스는 관계없이 그것을 가지고 어디에 데이터가 포함되어 있습니다. 따라서 UIImageView파일 이름을 알 수 없습니다.

또한 가능하더라도 뷰에서 파일 이름 정보를 얻을 수 없습니다. 그것은 MVC를 깨뜨립니다.


답변

UIView의 모든 하위 클래스에 setAccessibilityIdentifier 메서드를 사용할 수 있습니다.

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

NSString *file_name = [image accessibilityIdentifier] ;


답변

아니오 아니오 아니오… 일반적으로 이러한 일이 가능합니다. 그것은 당신을 더러운 사람처럼 느끼게 할 것입니다. 꼭 필요한 경우 다음을 수행하십시오.

  • +imageNamed:(NSString*)imageName기존 구현에 대한 호출 의 자체 구현으로 범주를 만들고 여기에 식별 된 기술 ( 개체 내에서 objc_setAssociatedObject / objc_getAssociatedObject를 사용하는 방법 )을 imageName사용하여 반환 된 UIImage 개체와 영구적으로 연결 합니다.

  • Objective-C 런타임의 메서드 조회 테이블에서 구현에 대해 제공된 구현을 바꾸려면 메서드 전환을 사용 imageNamed:합니다.

  • 원할 때마다 UIImage 인스턴스 (objc_getAssociatedObject 사용)와 연결 한 이름에 액세스합니다.

NIB에로드 된 UIImage의 이름을 가져올 수 없다는 경고와 함께 이것이 작동하는지 확인할 수 있습니다. NIB에서로드 된 이미지는 표준 함수 호출을 통해 생성되지 않는 것 같아서 정말 미스테리입니다.

구현은 귀하에게 맡기겠습니다. Objective-C 런타임을 사용하여 코드를 복사하여 붙여 넣는 것은 매우 나쁜 생각이므로 프로젝트의 요구 사항에 대해 신중하게 생각하고 필요한 경우에만 구현하십시오.


답변

이를 수행하는 고유 한 방법은 없습니다. 그러나이 동작을 직접 쉽게 만들 수 있습니다.

하위 클래스 UIImageView를 만들고 새 인스턴스 변수를 추가 할 수 있습니다 .

NSString* imageFileName;

그런 다음을 재정의 setImage하고 먼저 설정 imageFileName중인 이미지의 파일 이름을 설정 한 다음 [super setImage:imageFileName]. 이 같은:

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

기본적으로 할 수 없다고해서 불가능하다는 의미는 아닙니다. 🙂


답변

if ([imageForCheckMark.image isEqual:[UIImage imageNamed:@"crossCheckMark.png"]]||[imageForCheckMark.image isEqual:[UIImage imageNamed:@"checkMark.png"]])
{

}


답변

아니. 기본적으로 할 방법이 없습니다. UIImageView를 하위 클래스로 만들고 imageFileName 속성 (이미지를 설정할 때 설정)을 추가해야합니다.


답변

UIImage가 아닌 UIImageView는로드 된 이미지의 파일 이름을 보유하지 않습니다.

당신은

1 : (위의 Kenny Winker가 제안한대로) 하위 클래스 UIImageView가 fileName 속성을 갖거나

2 : 숫자 (image1.jpg, image2.jpg 등)로 이미지 파일의 이름을 지정하고 해당 번호 (image1.jpg의 경우 tag = 1, image2.jpg의 경우 tag = 2 등)로 이미지에 태그를 지정하거나

3 : UIImageView의 이미지를 업데이트 할 때마다 업데이트되는 클래스 수준 변수 (예 : NSString * currentFileName)가 있습니다.