UICollectionView像UITableView这样的节标题

我有一个简单的问题,任何人都能够成功地创build和实现类似于一个TableView中的标题CollectionView中的节标题? 我做了大量的研究,发现了一些代码片段,但是没有任何人能成功实现这个function。 我有一个照片的CollectionView,我试图实现的是根据他们被采取的月份分组。 我已经设法将它们分成这些部分,但是我现在所有的部分都是在每个部分的开头之上的空白标题。 我想要做的是显示当前空白标题中的月份。 每个部分的字母都以同样的方式显示在显示联系人的表格视图中。 预先感谢您的回复。

  1. 在Storyboard中启用节标题/页脚视图。

  2. 实现collectionView:viewForSupplementaryElementOfKind方法。

看这个链接

在集合视图中添加节标题适用于以下设置:

  1. 添加一个xib文件来定义标题视图的内容。 xib文件只包含一个单元格types定义。 在我的情况下,标题视图具有从UICollectionViewCell派生的自定义types(ImageCollectionViewHeaderCell)。 我认为这是必需的,但我不确定。 单元格标识符也被设置为预定义的string(例如)“ImageCollectionViewHeaderCellId”

  2. 添加自定义types的头文件和实现文件。 有一个方法来获取它的UINib对象(在第一步创build的xib文件的一种代理)是很方便的,

     @implementation ImageCollectionViewHeaderCell + (UINib*) nib { return [UINib nibWithNibName:@"nameOfXibFileCreatedAtStep1" bundle:nil]; } @end 
  3. 在集合视图控制器(在我的情况下,也是UICollectionView的dataSource和委托),在viewDidLoad方法中,添加补充元素types的注册

     - (void) viewDidLoad { [_collectionView registerNib:[ImageCollectionViewHeaderCell nib] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ImageCollectionViewHeaderCellId"]; } 
  4. 在集合视图控制器中,添加返回非空标题高度和标题视图实例的方法

     - (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; }