3 回答
TA贡献1784条经验 获得超8个赞
不。你不能那样做。
原因是UIImageView实例不存储图像文件。它存储一个显示UIImage实例。从文件制作图像时,您将执行以下操作:
UIImage *picture = [UIImage imageNamed:@"myFile.png"];
完成此操作后,将不再引用文件名。该UIImage实例包含的数据,无论它得到了它。因此,UIImageView可能无法知道文件名。
另外,即使可以,也永远不会从视图中获取文件名信息。这打破了MVC。
TA贡献1775条经验 获得超8个赞
您可以将setAccessibilityIdentifier方法用于UIView的任何子类
UIImageView *image ;
[image setAccessibilityIdentifier:@"file name"] ;
NSString *file_name = [image accessibilityIdentifier] ;
TA贡献1801条经验 获得超16个赞
不,不,不……一般而言,这些事情都是可能的。这只会让您感觉自己像个肮脏的人。如果绝对必要,请执行以下操作:
使用您自己的实现创建一个类,该类+imageNamed:(NSString*)imageName将调用现有实现,并使用此处标识的技术(如何在对象内部使用objc_setAssociatedObject / objc_getAssociatedObject?)imageName与返回的UIImage对象永久关联。
使用Method SwizzlingimageNamed:在Objective-C运行时的方法查找表中交换为您的实现提供的实现。
随时可以访问与UIImage实例关联的名称(使用objc_getAssociatedObject)。
我可以验证这一点是否可行,但需要注意的是,您无法获取NIB中加载的UIImage的名称。从NIB加载的图像似乎不是通过任何标准函数调用创建的,所以对我来说确实是个谜。
我将实施留给您。与Objective-C运行时绑定的复制粘贴代码是一个非常糟糕的主意,因此请仔细考虑项目的需求,并仅在必要时实施。
- 3 回答
- 0 关注
- 381 浏览
添加回答
举报