2011-04-04 62 views
1

我在尝试子类UIImageView以在其中添加一些自定义功能。我开始尝试做基础知识,只是用给定图像初始化对象并将其显示在屏幕上。
使用UIImageView一切工作正常,但如果我将我的对象从UIImageView更改为我的自定义类,则不会显示图像。
这是我到目前为止已经完成:目标c子类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 

于是,我用这statment:cell.postImage.image = [UIImage imageNamed:@"img.png"];
在此之前被执行,我也有postImage = [[UIImageView alloc] init];

如果postImage被声明为的UIImageView一切正常如预期。但是,如果我将其更改为Imager,则不会显示任何内容。 我错过了什么?

+0

为什么你有'@synthesize图像;'?你没有定义一个属性?它看起来像你的例子中缺少的东西。 – Kobski 2011-04-04 13:29:06

回答

4

您正在综合image,因此当您尝试使用点符号设置图像时,阻止在超类(即UIImageView)上调用setImage

删除此行:

@synthesize image; 
+0

感谢您的即时回复!这就是导致这个问题的原因。 只是要说清楚,是不是一般的规则,如果我不想在我的子类中定制getters/setter,我不应该使用@synthesize? – CrisDeBlonde 2011-04-04 13:35:32

+0

@CrisDeBlonde'@ synthesize'存在为您创建存取方法,您是否在定制getter和setters时使用它。请参阅[声明的属性](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html)。 – jnic 2011-04-04 13:51:24

+0

非常感谢您的回答。现在我想我已经清楚了。 – CrisDeBlonde 2011-04-04 14:02:38

3

我会建议使用Objective-C的 “类别”,而不是继承的UIImageView的。只要您不必添加任何成员变量,类别就是更好的解决方案。当你使用一个类别时,你可以在原始类的任何实例上调用你的扩展函数(在你的情况下是UIImageView),这样就不需要你有意识地在你想要使用你的新函数的任何地方有意识地使用你的子类。

你可以做如下的标题:

@interface UIImageView (UIImageView+URL) 

-(void) retrieveImageFromUrl: (NSString *)the_URL; 

@end 

然后在执行力度文件:

@implimentation UIImageView (UIImageView+URL)  

-(void) retrieveImageFromUrl: (NSString *)the_URL 
{ 
    // implimentation 
} 

@end 

那么无论你想用你的新功能上一个UIImageView,你只需要包含头文件。

+0

非常感谢您的回复!这是事实,我对类别不是很了解,但在后面的例子中,我将添加一些需要的成员变量,以及一些更多的方法。这只是子类建设的开始。无论如何,再次感谢您的回答! – CrisDeBlonde 2011-04-04 13:39:19