我正在尝试将UIImageView
子类化为其中添加一些自定义功能。我开始尝试做基础知识,只需使用给定图像初始化对象并将其显示在屏幕上
使用UIImageView
一切正常,但如果我将对象从UIImageView
更改为自定义类,则不会显示任何图像。
这是我到目前为止所做的:
//Imager.h
#import <UIKit/UIKit.h>
@interface Imager : UIImageView {
}
-(id) init;
-(void) retrieveImageFromUrl: (NSString *)the_URL;
@end
//Imager.m
#import "Imager.h"
@implementation Imager
@synthesize image;
-(id)init
{
self = [super init];
return self;
}
-(void) retrieveImageFromUrl: (NSString *)the_URL{
//Not implemented yet
}
@end
所以,我正在使用这个声明:cell.postImage.image = [UIImage imageNamed:@"img.png"];
在执行此操作之前,我还有postImage = [[UIImageView alloc] init];
如果postImage被声明为UIImageView,一切都按预期工作。但是,如果我改为将其更改为Imager,则不会显示任何内容。 我错过了什么?
答案 0 :(得分:4)
您正在综合image
,因此当您尝试使用点符号设置图像时,阻止对超类setImage
的调用(即UIImageView
)。
删除此行:
@synthesize image;
答案 1 :(得分:3)
我建议使用Objective-C“Category”而不是子类化UIImageView。只要您不必添加任何成员变量,类别就是更好的解决方案。当您使用类别时,您可以在原始类的任何实例上调用扩展函数(在您的情况下为UIImageView。这使您无需在任何可能想要使用新函数的地方有意识地使用子类。
您可以在标题中执行以下操作:
@interface UIImageView (UIImageView+URL)
-(void) retrieveImageFromUrl: (NSString *)the_URL;
@end
然后在implimentation文件中:
@implimentation UIImageView (UIImageView+URL)
-(void) retrieveImageFromUrl: (NSString *)the_URL
{
// implimentation
}
@end
然后,无论您想在UIImageView上使用新功能,只需要包含头文件即可。