У меня есть быстрый вопрос: кто-нибудь смог успешно создать и реализовать заголовки разделов в CollectionView, похожие на заголовки в TableView? Я провел много исследований и нашел фрагменты кода, но не был примером для тех, кто успешно достиг этого. У меня есть CollectionView фотографий, чего я пытаюсь добиться, это группировать их по разделам в зависимости от месяца, в который они были сделаны. Мне удалось разбить их на те разделы, но теперь у меня есть пустой заголовок прямо над началом каждого раздела. То, что я хочу сделать, это показать месяцы в тех пустых заголовках. Точно так же буквы в каждом разделе отображаются в Tableview, который отображает контакты. Спасибо за ваши ответы заранее.
UICollectionView с заголовками разделов, такими как UITableView
Ответ 1
-
Включить просмотр заголовка/нижнего колонтитула раздела в раскадровке.
-
Внедрить метод
collectionView:viewForSupplementaryElementOfKind
.
см. Эта ссылка
Ответ 2
Добавление заголовков разделов в виде коллекции работает для меня со следующей настройкой:
-
добавить файл xib для определения содержимого заголовка. Файл xib содержит только одно определение типа ячейки. В моем случае представление заголовка имеет собственный тип (ImageCollectionViewHeaderCell), который происходит от UICollectionViewCell. Я думаю, что это требуется, но я не уверен. Идентификатор ячейки также установлен на предопределенную строку (например, "ImageCollectionViewHeaderCellId"
-
добавить заголовок и файлы реализации для настраиваемого типа. Удобно иметь метод для получения своего объекта UINib (своего рода прокси для xib файла, созданного на шаге 1).
@implementation ImageCollectionViewHeaderCell + (UINib*) nib { return [UINib nibWithNibName:@"nameOfXibFileCreatedAtStep1" bundle:nil]; } @end
-
в контроллере представления коллекции (который, в моем случае, также является источником данных и делегатом UICollectionView), в методе viewDidLoad добавьте регистрацию для типа дополнительного элемента
- (void) viewDidLoad { [_collectionView registerNib:[ImageCollectionViewHeaderCell nib] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ImageCollectionViewHeaderCellId"]; }
-
в контроллере представления коллекции, добавьте методы для возврата высоты нестандартного заголовка и экземпляров представления заголовка
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { return CGSizeMake(0., 30.); } - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { NSAssert([kind isEqualToString:UICollectionElementKindSectionHeader], @"Unexpected supplementary element kind"); UICollectionReusableView* cell = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:ImageCollectionViewHeaderCellIdentifier forIndexPath:indexPath]; NSAssert([cell isKindOfClass:[ImageCollectionViewHeaderCell class]], @"Unexpected class for header cell"); ImageCollectionViewHeaderCell* header_view = (ImageCollectionViewHeaderCell*) cell; // custom content return cell; }