petaire
petaire

Reputation: 515

Cells not appearing in UICollectionView

I don't understand why my cells aren't showing:

class MenuBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

    let cellId = "pouet"

    lazy var customCollectionView : UICollectionView = {
        let layout = UICollectionViewLayout()
        let cv  = UICollectionView(frame: .zero, collectionViewLayout: layout)
        cv.backgroundColor = UIColor.gray
        cv.dataSource = self
        cv.delegate = self

        return cv
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

        customCollectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)
        addSubview(customCollectionView)
        addConstraintsWithFormat(format: "H:|[v0]|", views: customCollectionView)
        addConstraintsWithFormat(format: "V:|[v0]|", views: customCollectionView)
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 4
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = customCollectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        print("test")

        return cell
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Now my print("test") is not showing either, meaning that the method is actually not called, right? So what is wrong ?

Upvotes: 2

Views: 3213

Answers (1)

Anh Pham
Anh Pham

Reputation: 2118

Change this line of code:

let layout = UICollectionViewLayout()

To:

let layout = UICollectionViewFlowLayout()

UICollectionViewLayout is abstract class you can't use it directly.

Upvotes: 9

Related Questions