2013-09-10 23 views
0

我不確定這是否爲故事板錯誤。我用一個自定義單元格創建了一個項目。從自定義單元格加載UIImageView子類

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"HomeGameTurnCell"; 
    HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[HomeTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

自定義單元格有一些圖像視圖。其中一個圖像視圖是一個子類。

@interface HomeTableViewCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet RoundedProfilePicture *profilePictureImageView; 
@property (strong, nonatomic) IBOutlet UIImageView *turnThumbnailImage; 
@property (strong, nonatomic) IBOutlet UILabel *usernameLabel; 
@property (strong, nonatomic) IBOutlet UILabel *lastPlayedLabel; 

@end 

的RoundedProfilePicture子只是有以下幾點:

-(id)init { 
    NSLog(@"%s",__PRETTY_FUNCTION__); 
    self = [super init]; 
    if (self) { 
     [self setupView]; 
    } 
    return self; 
} 

- (void)setupView 
{ 
    NSLog(@"%s",__PRETTY_FUNCTION__); 
    self.clipsToBounds = YES; 
    self.layer.cornerRadius = self.bounds.size.width/2; 
    self.layer.borderWidth = 3; 
    self.layer.borderColor = [UIColor darkGrayColor].CGColor; 
} 

什麼我發現是,RoundedProfilePicture方法不會被調用。在故事板內,我設置了一個原型單元格和正確的標識符。我也有圖像視圖設置爲正確的自定義類。但它似乎沒有生效,有什麼我失蹤/可以檢查?

回答

0

問題是,當UIimageView被子類化並從故事板中調用時,會爲init調用一個不同的方法。

-(id)initWithCoder:(NSCoder *)aDecoder { 
    // As the subclassed UIImageView class is called from storyboard the initWithCoder is overwritten instead of init 
    NSLog(@"%s",__PRETTY_FUNCTION__); 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setupView]; 
    } 
    return self; 
} 

這可以解決未調用圓角輪廓視圖的問題。

0

當你正在重用的元素,您應該覆蓋的UITableViewCell方法:

-(void)prepareForReuse 

,而不是初始化。它會每次調用。

如果你想一次初始化你應該這樣做的:initWithStyle:reuseIdentifier:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     //do your stuff here 
    } 
    return self; 
} 

從蘋果文檔:

如果您註冊了指定的標識符和新小區的一類必須創建,此方法通過調用其initWithStyle:reuseIdentifier:方法來初始化單元。對於基於筆尖的單元格,此方法從提供的nib文件加載單元格對象。如果現有單元可供重用,則此方法將調用單元的prepareForReuse方法。

+0

謝謝,但我不確定這是如何實現的,你有這樣的例子嗎?此外,這個特定的更改會影響UIImageView類未被加載的問題嗎? – StuartM

+0

我更新了我的答案 - 而不是 - (id)init使用我的initWithStyle –

+0

再次感謝。抱歉是一種痛苦,但我實際上並沒有理解第一部分prepareForReuse如何用於我的上下文。我實際上已經嘗試將init的init從initWithStyle更改爲init以查看是否有任何區別,但是我可以改變它。 – StuartM

相關問題