Добавить панель поиска в заголовок в виде коллекции с пользовательским макетом потока
Я пытаюсь добавить панель поиска в качестве заголовка в пользовательский класс макета потока.
Я знаю, как добавить его в раскадровку, если макет потока не является пользовательским, просто отметив поле заголовка раздела, но как только я использую пользовательский класс, эта опция больше не доступна.
В основном у меня возникают проблемы с концептуализацией атрибутов макета и способов их реализации. Кроме того, я не уверен, стоит ли мне помещать методы в мой источник данных, контроллер представления или подкласс макета потока, поэтому, пожалуйста, будьте конкретны с ними.
В учебнике по Рэю Вендерлиху показан только метод раскадровки.
1 ответ
Создайте HeadeView с помощью UICollectionReusableView и вызовите следующих делегатов.
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
if (kind == UICollectionElementKindSectionHeader) {
HeaderView *headerView = nil;
headerView = (ProductListingHeaderView*)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
if (headerView == nil) {
headerView=[[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:self options:nil] objectAtIndex:0];
}
return headerView;
}
return nil;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
if (![collectionView numberOfItemsInSection:section]) {
return CGSizeZero;
}
return CGSizeMake([(UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout headerReferenceSize].width, searchBarHeight);
}