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