Как установить UICollectionViewDelegateFlowLayout?


UIViewController поддерживает ссылку на UICollectionView. Контроллер должен изменить встроенный макет потока с помощью UICollectionViewDelegateFlowLayout.

довольно легко установить источник данных представления в self:

MyViewController.м

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

но как я могу установить контроллер в качестве макета потока делегатов представления?

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

Я пробовал:

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

но я получаю ошибку: "Назначение несовместимых типов указателей ...".

файл заголовка коллекции выглядит так:

MyViewController.h

@interface MyViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
2 78

2 ответа:

просто self.collectionView.delegate = self;. Обратите внимание, что UICollectionViewDelegateFlowLayout наследует от UICollectionViewDelegate.

Я признаю, что его могут застать вас врасплох в первую очередь.

да и это будет работать только если self.collectionView.collectionViewLayout фактически установлен на ваш макет потока. (или установить с initWithFrame:collectionViewLayout:)

согласно предыдущему ответу просто пример использования. Это действительно не ясно, но я могу показать, как это работает:

@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