对于我正在开发的概念,我需要手动加载XIB文件,并使用类和实例方法调配我已经能够截取对UIImage类的调用imageCustomNamed,imageCustomWithContentsOfFile和imageCustomWithCGImage以及UIImageView的initCustomWithImage。我想要的是检测图像名称,并将其替换为动态渲染的一些内容,而不是设计时在IB中设置的内容。
例如:
当XIB有一个UIImageView对象,其Image属性设置为“About.png”时,我需要拦截该图像的加载,并根据特定条件替换另一个图像。在UIImageView对象在设计时加载图像集后,甚至可以替换图像,但看起来像用于设置UIImageView内容的UIImage的原始名称不会存储在任何地方。
我不能使用IBOutlets,因为我不知道XIB文件的内容;这个类应该适用于任何XIB而不仅仅是特定的XIB。
自定义方法实际上是在默认方法中调用的,但看起来像加载XIb时系统使用imageCustomWithCGImage接受CGImageRef作为参数;从中无法知道原点(即:图像文件名)
有关如何拦截图像加载的任何想法吗?
答案 0 :(得分:1)
在OS 3中,至少可以覆盖UIImageNibPlaceholder的initWithCoder:。替换为这样的东西:
-(id)hack_UIImageNibPlaceholder_initWithCoder:(NSCoder*)coder
{
NSString * name = [coder decodeObjectForKey:@"UIResourceName"];
[self release];
return [[UIImage imageNamed:name] retain];
}
如果您从其他软件包(例如框架)加载nib,我不确定会发生什么。
答案 1 :(得分:0)
也许您可以在xib文件中设置UIImageView的另一个属性,然后引用该属性?例如label或tag ...