2014-09-22 99 views
1

上週我問了一個類似的問題,但我想我已經縮小到更具體的是什麼問題。自定義單元格正在加載並且在我使用collectionView.dequeReusableCellWithIdentifier("MenuCell", forIndexPath: indexPath) as MenuCollectionViewCell時看起來會被正確調用「MenuCell」是我自定義單元格的重用標識符,而MenuCollectionViewCell是包含自定義代碼的swift文件。從調試代碼我已經確定UIImageView沒有被加載。我做了一張支票,這就是我想出的。爲什麼ImageView未被加載,並且只出現爲零,我不知道。我將發佈正在加載的文件和自定義單元代碼的代碼。UIImageView返回零自定義UICollectionViewCell

class MenuViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
{ 
    // Not sure if I really need this 
    @IBOutlet var menuCollectionView: MenuCollectionView! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view 
     view.backgroundColor = UIColor(patternImage: UIImage(contentsOfFile: "behind_alert_view.png")) 
     // This was the fix here 
     self.menuCollectionView.delegate = self 
     self.menuCollectionView.dataSource = self 

    } 

    // Variables 
    var menuImagesArray = ["MyProfileIcon.png"] 

    // Data Source Protocol 
    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
    { 
     return 1 
    } 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return menuImagesArray.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    { 
     var menuCell: MenuCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("MenuCell", forIndexPath: indexPath) as MenuCollectionViewCell 

     var image: UIImage! 

     if ((menuCell.imageView) != nil) 
     { 
      image = UIImage(named: menuImagesArray[indexPath.row]) 
     } 

     menuCell.imageView.image = image 



     return menuCell 
    } 

} 

這裏是自定義單元格文件:

class MenuCollectionViewCell: UICollectionViewCell 
{ 
    @IBOutlet var imageView: UIImageView! 

} 

是我收到的錯誤是由於展開了一個可選的一個空值終止。問題是UIImageView肯定的,任何幫助搞清楚這將是偉大的!

EDIT /解決

問題是要在UICollectionView的連接。我有參考,但我沒有正確使用它。我試圖在故事板中設置dataSource和delegate,這似乎是我的問題。當我轉移到代碼並提供參考,並以我對這兩個調用的方式引用它時,它立即修復它。我希望這可以幫助別人,如果他們遇到同樣的問題!現在開始自定義它,因爲它彈出!

+0

你連接在IB的imageView插座?您是否將IB中的單元格類更改爲MenuCollectionViewCell? – rdelmar 2014-09-22 14:59:28

+0

我試圖在IB連接imageView,並且出現錯誤,提示您無法連接到原型單元。是的,我確信班級正確地改變了。也許imageView可以連接,我錯了嗎? – SamG 2014-09-22 15:24:55

+0

插座必須定製到自定義單元格子類,而不是控制器(這就是爲什麼你會得到該錯誤)。 – rdelmar 2014-09-23 02:33:56

回答

1

問題根本不在於UIImageView。 Rdelmar在檢查網點是否正確的陳述中是正確的。 menuCollectionView的插座參考沒有正確鏈接,這導致錯誤彈出。通過修復@IBOutlet連接並通過代碼設置代理和數據源,而不是搞亂故事板,它立即解決了問題。我用來設置委託和數據源的代碼如下,完全取決於連接是否是正確的連接。

self.menuCollectionView.delegate = self 
self.menuCollectionView.dataSource = self 

確實很簡單。我希望這可以幫助別人,如果他們遇到類似的問題!先檢查連接!然後通過並確保一切都在做它應該做的!

6

連接UICollectionView並不需要,因爲這已經完成了,但是分配委託和數據源都是必需的。這可以通過這種方式來完成:

self.collectionView?.delegate = self 
self.collectionView?.dataSource = self 

我發現這個答案,真的很興奮,因爲我正是這個問題。但是,在檢查我的連接並確保代理和數據源被正確分配後,我的imageView仍然爲零。

原來對我來說,我已經註冊我的情節板中的新的子類,所以我不得不從我的代碼中刪除此調用:

self.myCollectionView.registerClass(MyCollectionViewCell.self, forCellWithReuseIdentifier: Constants.reuseIdentifier) 

這是替換在故事板的登記和造成的ImageView對我來說是零。我刪除了代碼後,事情就奏效了。感謝您的問題SamG,並希望這可以幫助其他可能遇到這兩個問題之一的人。

+0

謝謝,安德魯!我遇到了這個問題,試圖在一個collectionviewcell子類中顯示一個簡單的圖像。自定義單元格對象已返回,但imageView屬性始終爲零。刪除registerClass調用也爲我解決了它。 – 2016-08-26 12:30:56

0

對我而言,這個經常討論的話題沒有解決方案直接幫助。最後,我通過向故事板自定義單元添加「Collection Reusable View」標識來解決此問題。這個值被設置爲與DataSource-Function dequeueReusableCell(withReuseIdentifier:...)中相同的值。我認爲這是一個非常基本的東西:)

相關問題