如果您不想修改现有代码,您可以编写一个类别,它将在运行时替换图像的名称,在初始阶段它可以是这样的:
@implementation UIImage (replacementImage)
+ (void) load {
Method fontWithName_size_ = class_getClassMethod([UIImage class], @selector(imageNamed:));
Method replacementFontWithName_size_ = class_getClassMethod([UIImage class], @selector(replacement_imageNamed:));
if (fontWithName_size_ && replacementFontWithName_size_ && strcmp(method_getTypeEncoding(fontWithName_size_), method_getTypeEncoding(replacementFontWithName_size_)) == 0)
method_exchangeImplementations(fontWithName_size_, replacementFontWithName_size_);
}
+ (UIImage *)replacement_imageNamed:(NSString *)name {
NSString *currentLocation = #YOUR_CURRENT_IMAGES_LOCATION#;
NSString *replacementImageName = [currentLocation stringByAppendingPathComponent:name];
return [self replacement_imageNamed:replacementImageName];
}
@end
但是它只替换了 imageNamed 方法的实现,这可能还不够,您需要替换一些其他方法。我没有对此进行测试,因此可能需要添加一些调整。检查图像是否存在于当前位置也很有用,如果不存在,则在另一个位置搜索它。
使用这种方法,在 IB 中设置的图像也将被替换。