2012-11-04 53 views
9

我剛開始第一次使用UICollectionView玩耍。似乎很好地工作,但有一個問題和一個問題。UICollectionView registerCell - 空白單元格

我有如下我UICollectionView設置和使用自定義單元格:

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView 
{ 
    return 1; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ContactCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.nameLbl.text = @"text"; 

    return cell; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(145, 95); 
} 

- (UIEdgeInsets)collectionView: 
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(10, 10, 10, 10); 
} 

因此,這是所有的花花公子,但我已經加入這一行到viewDidLoad

[collectionView registerClass:[ContactCell class] forCellWithReuseIdentifier:@"Cell"]; 

這是造成麻煩我不明白爲什麼。當我啓用此行時,我的所有單元格都變爲空白。怎麼來的?我錯過了什麼?

另外,據我所知,如果該行啓用可重用的單元格,爲什麼我必須使用集合視圖vs不必在表視圖中?

任何技術或解釋性幫助表示感謝, 謝謝。

+0

你怎麼設置單元格的看法?以編程方式在你的子類? – jackslash

+0

我在Storyboard中設置了它。我有一個UICollectionView與單個單元格,該單元格的標識符,自定義類掛鉤並在其中標記。 –

回答

24

故事板會自動將您在故事板中設計的單元格註冊到您在界面構建器的右側窗格中爲該單元格指定的重用標識符。通過爲該重用標識符重新註冊您的類,集合視圖只需在您的子類上調用alloc init,並期望以編程方式設置視圖。

the documentation

如果您以前註冊使用相同的重用 標識類或筆尖文件,你在cellClass參數指定類取代 舊條目。如果您希望 註銷指定的重用標識符的類,則可以爲cellClass指定nil。

如果你想設計細胞外的故事板您可以設置你的界面編程的或設置單元格在一個單獨的廈門國際銀行,然後調用

- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier

當筆尖絕有一個頂級視圖,它是您的自定義子類的一個單元,並在界面構建器中設置了正確的重用標識符。

+0

所以你說我只能從xib中直觀地設計我的細胞並使用你建議的方法,否則我必須以編程方式創建它? –

+1

或者您可以通過將原型單元格添加到集合視圖來在故事板中設計它們。故事板會自動爲您註冊該單元並重新啓用。 – jackslash

+0

這就是爲什麼當你調用'registerClass:'時,它會變成空白,你不喜歡你在故事板上做的東西。這也是爲什麼它沒有線路的原因。收集意見不會沒有指定某種可重複使用的單元格 – jackslash

0

刪除

[self.collectionview registerClass:[NewCell class] forCellWithReuseIdentifier:@"Cell"]; 

對於情節串連圖板,我們不需要這條線

+0

是的,答案是√ –