Why is UICollectionViewCell's outlet nil?

IosSwiftInterface BuilderIos8Uicollectionviewcell

Ios Problem Overview


I have created a custom UICollectionViewCell in Interface Builder, binded views on it to the class, and then when I want to use and set a string to the label on the string, tha label has a nil value.

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Register cell classes
    self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
}

override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
    
    var cell: LeftMenuCollectionViewCell
    cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell
    println(cell.label) // <- this is nil, why??
    cell.label.text = "asd"
   
    return cell
}

And the subclassed cell:

class LeftMenuCollectionViewCell: UICollectionViewCell {
    
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}

Ios Solutions


Solution 1 - Ios

I am calling self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls") again. If you are using a storyboard you don't want to call this. It will overwrite what you have in your storyboard.

If you still have the problem check wether reuseIdentifier is same in dequeueReusableCellWithReuseIdentifier and in storyboard.

Solution 2 - Ios

Just remove this line:

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")

Solution 3 - Ios

If you are using xib, make sure that you have added this line of code to your viewdidload.

Objective C:

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];

Swift:

collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")

Solution 4 - Ios

Gotta register that nib guys!

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")

Solution 5 - Ios

Looks like there's two ways to register and I was using the wrong one the first. I have a custom xib view so registered with the second option, and we have data!

1:

collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier") 

2:

collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")

Solution 6 - Ios

I had a similar problem, but my mistake was that I didn't delegate CollectionViewCell to be able to change the label text..

Solution 7 - Ios

I think that best solution is to directly use from storyboard where add a CollectionView, in alternative you need to remove a CollectionViewCell from your CollectionView in storyboard and register a cell with the following command:

> collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")

Solution 8 - Ios

You didn't register your cell,

fileprivate let yourIdentifier = ""yourIdentifier"
super.viewDidLoad() { 

//here you need to register cell collectionView?.register(NameOfYourClass.self, forCellWithReuseIdentifier: "yourIdentifier") }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJ&#225;nosView Question on Stackoverflow
Solution 1 - IosJánosView Answer on Stackoverflow
Solution 2 - Ios能蟹仔View Answer on Stackoverflow
Solution 3 - IosVineethView Answer on Stackoverflow
Solution 4 - IosMichaelView Answer on Stackoverflow
Solution 5 - IosSergioView Answer on Stackoverflow
Solution 6 - IosjustRadojkoView Answer on Stackoverflow
Solution 7 - IosdgalluccioView Answer on Stackoverflow
Solution 8 - IosMilosh MilivojevichView Answer on Stackoverflow