2014-12-02 103 views
0

所以我只是試圖鏈接我的自定義單元格類與我的集合單元格。我一直在爲此工作兩天,無法弄清楚我做錯了什麼。我跟着這個教程,並已在那裏成功,但不知道我在我自己的項目中缺少什麼。自定義集合單元格錯誤

//WORKING 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as UICollectionViewCell 

//Crashes 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as ChampionViewCell 

即使我嘗試創建一個沒有其他任何東西的新項目,我也有這個問題。當我連接我的自定義單元類時,應用程序崩潰。

這裏是我的自定義單元格類:

import UIKit 
class ChampionViewCell: UICollectionViewCell { 
    @IBOutlet weak var champImage: UIImageView! 
} 

我的小區標識設置爲「ChampionCell」在故事板,並在我的CollectionViewController文件的頂部。我將視圖控制器和單元格鏈接到故事板。

我真的不知道我缺少什麼。對不起,如果這是一個超級新問題,但我真的很努力想出來。

感謝您的幫助!

回答

0

爲了dequeueReusableCellWithReuseIdentifier實例化一個自定義單元格,則必須使用此方法UICollectionView註冊電池類:

func registerClass(_ cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String) 

只是調用這個方法在你的viewDidLoad方法,它應該工作。

該方法應被調用如下:

self.collectionView.registerClass(ChampionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

其中reuseIdentifier是包含小區標識符的變量/屬性。

+0

這似乎沒有工作。我收到兩個錯誤: 1.參數'cellClass'中的外部'_'沒有關鍵字參數名稱 2.函數聲明體中的預期'{' – 2014-12-02 22:32:34

+0

@StuartCasarotto:我認爲您在錯誤地調用該方法方式 - 看到更新的答案 – Antonio 2014-12-02 22:39:22

+0

你是對的。謝謝,這是完全合理的,我很難過,我沒有想到要儘快查看。謝謝。我知道這會很簡單。 – 2014-12-02 23:21:21

0

在你的故事板上,單元格的類需要設置爲ChampionViewCell。當該單元格出列時,它會使用給定的標識符從故事板中取出一個單元格(在您的案例中,ChampionCell)。但是出隊的單元仍然是UICollectionViewCell

在故事板上,選擇單元格,然後在檢查器面板(右側面板)中,選擇身份檢查器(看起來有點像報紙)。 「類」應該說「UICollectionViewCell」。將其更改爲「ChampionViewCell」。