2011-04-04 63 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