Как установить 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 ответа:
просто
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