Comment définir UICollectionViewDelegateFlowLayout?

Un UIViewController maintient une reference à un UICollectionView. Le controller doit modifier la disposition de stream embeddede à l'aide de UICollectionViewDelegateFlowLayout.

Il est assez facile de définir la source de données de la vue sur soi-même:

MyViewController.m

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

Mais comment puis-je définir le controller comme étant la disposition du stream de delegates de la vue?

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

J'ai essayé:

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

Mais j'ai l'erreur: "Types de pointeurs incompatibles affectant …".

Le file d'en-tête de collection ressemble à ceci:

MyViewController.h

 @interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> 

Juste self.collectionView.delegate = self; . Notez que UICollectionViewDelegateFlowLayout hérite de UICollectionViewDelegate .

J'avoue que cela peut vous prendre au dépourvu au début.

Oh, cela ne fonctionnera que si self.collectionView.collectionViewLayout est défini sur votre disposition de stream. (ou avec initWithFrame:collectionViewLayout:

Selon la réponse précédente, juste un exemple d'utilisation. Ce n'est vraiment pas clair mais je peux montrer comment ça fonctionne:

 @interface PrettyViewController()<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource> //some code @end @implementation PrettyViewController - (void)viewDidLoad { [super viewDidLoad]; self.collectionView.delegate = self;//bingo! right here } #pragma mark - UICollectionViewDelegateFlowLayout - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { return CGSizeMake([[UIScreen mainScreen] bounds].size.width, 20.0); } @end