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