3 回答

TA貢獻1785條經(jīng)驗 獲得超4個贊
不。你不能那樣做。
原因是UIImageView實例不存儲圖像文件。它存儲一個顯示UIImage實例。從文件制作圖像時,您將執(zhí)行以下操作:
UIImage *picture = [UIImage imageNamed:@"myFile.png"];
完成此操作后,將不再引用文件名。該UIImage實例包含的數(shù)據(jù),無論它得到了它。因此,UIImageView可能無法知道文件名。
另外,即使可以,也永遠不會從視圖中獲取文件名信息。這打破了MVC。

TA貢獻1827條經(jīng)驗 獲得超4個贊
您可以將setAccessibilityIdentifier方法用于UIView的任何子類
UIImageView *image ;
[image setAccessibilityIdentifier:@"file name"] ;
NSString *file_name = [image accessibilityIdentifier] ;

TA貢獻1845條經(jīng)驗 獲得超8個贊
不,不,不……一般而言,這些事情都是可能的。這只會讓您感覺自己像個骯臟的人。如果絕對必要,請執(zhí)行以下操作:
使用您自己的實現(xiàn)創(chuàng)建一個類,該類+imageNamed:(NSString*)imageName將調(diào)用現(xiàn)有實現(xiàn),并使用此處標識的技術(如何在對象內(nèi)部使用objc_setAssociatedObject / objc_getAssociatedObject?)imageName與返回的UIImage對象永久關聯(lián)。
使用Method SwizzlingimageNamed:在Objective-C運行時的方法查找表中交換為您的實現(xiàn)提供的實現(xiàn)。
隨時可以訪問與UIImage實例關聯(lián)的名稱(使用objc_getAssociatedObject)。
我可以驗證這一點是否可行,但需要注意的是,您無法獲取NIB中加載的UIImage的名稱。從NIB加載的圖像似乎不是通過任何標準函數(shù)調(diào)用創(chuàng)建的,所以對我來說確實是個謎。
我將實施留給您。與Objective-C運行時綁定的復制粘貼代碼是一個非常糟糕的主意,因此請仔細考慮項目的需求,并僅在必要時實施。
- 3 回答
- 0 關注
- 891 瀏覽
添加回答
舉報