Can't add textLabel to a UICollectionViewCell?

8.9k views Asked by At

I have a class file that is a subclass of the UICollectionViewController class. In my cellForItemAtIndexPath method, I am trying to set the textLabel of the cells. However, there is no textLabel option in the completions. This is the method so far:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as UICollectionViewCell
    // Configure the cell
    cell.backgroundColor = cellColor ? UIColor.blueColor() : UIColor.orangeColor()
    //cell.textLabel.text = "Text"???
    switch indexPath.item {
    case 0...5:
        cellColor = true
    case 6...13:
        cellColor = false
    default:
        cellColor = true
    }
}

What can I do to add the textLabel to the cells?

3

There are 3 answers

5
Ezimet On BEST ANSWER

Unlike tableViewCell ,UICollectionViewCell doesn't have textLabel. You need to add the UILabel to cell's content view example:

var title = UILabel(frame: CGRectMake(0, 0, cell.bounds.size.width, 40))
cell.contentView.addSubview(title)
1
Mike Crawford On

Use the documentation, Luke. It's under Xcode's "Help" menu.

UICollectionViews don't have textLabels - that's why you don't get a completion.

They have contentViews. You can put text in the content view though. Any UIView subclass will do. If all you want is text (no graphics), then you could use a UITextView for your content view, then assign to its "text" property:

cell.contentView.text = "Text"

However, you will want a subclass of UICollectionView that already provides the UITextViews for the contentViews.

0
elarcoiris On

Swift 4

Here is the Swift 4 way to add text to a collection view cell:

    let title = UILabel(frame: CGRect(x: 0, y: 0, width: cell.bounds.size.width, height: 40))
    title.textColor = UIColor.black
    title.text = "T"
    title.textAlignment = .center
    cell.contentView.addSubview(title)