How to set UICollectionViewDelegateFlowLayout?

Rich Apodaca picture Rich Apodaca · Oct 17, 2012 · Viewed 75.9k times · Source

A UIViewController maintains a reference to a UICollectionView. The controller should modify the built-in flow layout using the UICollectionViewDelegateFlowLayout.

It's pretty easy to set the view's data source to self:

MyViewController.m

- (void)viewDidLoad
{
    self.collectionView.dataSource = self;
}

But how do I set the controller to be the delegate flow layout of the view?

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    // self.collectionView.??? = self; 
}

I've tried:

- (void)viewDidLoad
{
    self.collectionView.dataSource= self;
    self.collectionView.collectionViewLayout = self; 
}

But I get the error: "Incompatible pointer types assigning ...".

The collection header file looks like this:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

Answer

John Estropia picture John Estropia · Oct 17, 2012

Just self.collectionView.delegate = self;. Note that UICollectionViewDelegateFlowLayout inherits from UICollectionViewDelegate.

I admit it caught me off guard at first.

Oh and this will only work if self.collectionView.collectionViewLayout is actually set to your flow layout. (or set with initWithFrame:collectionViewLayout:)