2014-01-28 107 views
6

剛開始使用UICollectionView。我用IB在UIViewController中創建了一個簡單的UICollectionView。它通過分頁水平滾動。我在UICollectionView內部放置了一個簡單的UICollectionViewCell。我爲單元設置了重用標識符。viewWithTag在初始化UICollectionViewCell時返回nil

我在UICollectionViewCell內放置了一個標籤爲100的UILabel

viewDidLoad,我呼籲:

[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Thing"]; 

後來我嘗試初始化像這樣的小區:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Thing" forIndexPath:indexPath]; 
    cell.backgroundColor = [UIColor greenColor]; 

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 
    nameLabel.text = @"Bogus"; 

    return cell; 
} 

當我運行應用程序,視圖加載正確;我可以水平滾動2個單元格。我看到了識別每個細胞的難看的綠色。

但是,viewWithTag方法返回nil,因此nameLabel文本未設置。

爲什麼?

請注意,我也嘗試定義一個自定義的子類UICollectionViewCell並調用registerClass。在IB中,我將單元類更改爲自定義子類,並將子類中的UILabelUILabel插座綁定。

但這也行不通。 (我寧願避免使用自定義子類方法,因爲似乎沒有必要定義僅用於保存IBOutlets的類。)

我在想我在這裏丟失了一些明顯的東西。這裏

類似問題描述:

Trouble accessing Image from instance of UICollectionViewCell

+0

你在哪裏創建UILabel? – Odrakir

+0

UILabel在Interface Builder中配置。我不期望在代碼中進行分配。我在想,viewWithTag應該檢索創建的實例。這是它如何與UITableView一起工作。 – Daniel

+0

您是否在您的筆尖中爲您的原型CollectionViewCell指定了reuseIdentifier? – chandu

回答

26

刪除registerClass行。你是在故事板上做的,所以你不需要它。

+0

這適用於我。 –

+0

他們爲什麼會將默認行爲混淆開發者的sh * t?不要大多數人使用故事板? –

1

嘗試

UILabel *nameLabel = (UILabel *)[cell.contentView viewWithTag:100];

更新:

你可以看一下細胞的層次結構及其所有子視圖的標籤:[self showAllSubView:cell] ;,可以你可以找到標籤10的標籤?

- (void)showAllSubView:(UIView *)view 
{ 
    for (UIView * subView in [view subviews]) { 
     NSLog(@"%@, tag:%d", subView, subView.tag) ; 
     [self showAllSubView:subView] ; 
    } 
} 
+1

曾嘗試過 - 沒有工作。嘗試再次踢腳 - 仍然沒有運氣 – Daniel

+0

@丹尼爾我已經更新了我的答案,它可能有助於找到標籤是否在單元格層次結構上。 – KudoCC