2014-04-28 50 views
1

我有與此question的答案相同的代碼。我試圖實現一個自定義視圖單元格,它正在這樣做,直到它轉換單元格並嘗試分配我的自定義視圖單元格的屬性爲止(因爲它仍然將單元格視爲UICollectionViewCell而不是CustomViewCell)。在UIView中註冊自定義集合視圖單元格

返回仍然日誌錯誤給出了在viewDidLoad中/的loadView註冊自定義單元格關聯的問題:

-[UICollectionViewCell imageView]: unrecognized selector sent to instance 0x1658c540 

我打電話一個UIView集合視圖,而不是一個UIViewController,所以沒有viewDidLoad的類方法。我試圖用我知道首先調用的方法實現寄存器。

如何設置自定義單元類的註冊?對於這個問題,我該如何製作一些在viewDidLoad方法的實例開始處運行一次的方法?

讓我知道是否有更多的代碼是必要的;我會更新這個問題。

EDIT_1:

原來我在老代碼,我已經有一段時間沒有在梳理其聲明。不過,@Wyatt得到了我需要的邏輯,但是看起來NSLog沒有爲該方法運行。無論如何,我發現我在一些舊的代碼中註冊了兩次,而這些代碼在初始化之後被調用了一段時間。 @尼爾的回答也是正確的。多謝你們!

回答

3

如果日誌告訴你UICollectionViewCell不知道什麼imageView是,那麼它準確地告訴你,你正在創建UICollectionViewCell項目,而不是CustomViewCell秒。日誌報告對象的實際類別,而不是代碼中可能或不可能被轉換的對象。

當您創建UICollectionView或未能創建正確類型的單元格時,您要麼未能註冊單元類。

UICollectionView *collectionView = [[UICollectionView alloc] init... // omitted 

[collectionView registerClass:[CustomViewCell class] forCellWithReuseIdentifier:@"CustomIdentifier"]; 

讓細胞在cellForItemAtIndexPath:

CustomViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomIdentifier" forIndexPath:indexPath]; 
+0

這個工程!謝謝!我發現我聲明瞭兩次,但由於某種愚蠢的原因,我將CustomViewCell類註冊爲我自己的類。我認爲這是更早的代碼,我仍然使用UICollectionViewCell並使用addSubivew:將東西插入到單元格中。不好的做法和我聯繫的問題應該有所幫助,如果有人閱讀此文章遇到損壞的單元格或不正確的單元格寄存器。 –

2

對於UIView子類,我有initWithFrame調用像doInit這樣的方法來設置我的視圖。

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self doInit]; 
    } 
    return self; 
} 

-(void)doInit 
{ 
    //do stuff here, like register collectionViewCell subclasses 
} 
+0

謝謝!這工作! –

相關問題