objective c子类UIImageView

时间:2011-04-04 13:23:05

标签: objective-c xcode inheritance uiimageview subclass

我正在尝试将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,则不会显示任何内容。 我错过了什么?

2 个答案:

答案 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上使用新功能,只需要包含头文件即可。