我在处理嵌套集合视图时遇到了问题。 层次结构如下:
OuterCollectionView的单元格大小与屏幕大小相同(就像翻页一样) 我将outerCollectionView的委托和数据源设置为UIViewController,将innerCollectionView的委托和数据源设置为包含单元格,如下所示:
-(FeaturedPageCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
FeaturedPageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FeaturedCell" forIndexPath:indexPath];
cell.nestedCollectionView.dataSource = cell;
cell.nestedCollectionView.delegate = cell;
[cell.nestedCollectionView setBackgroundColor:[[UIColor whiteColor] colorWithAlphaComponent:.01]];
cell.venueThumbnail.image = [UIImage imageNamed:[self.venueThumbnails objectAtIndex:indexPath.item]];
cell.venueNameLabel.text = [self.venueNames objectAtIndex:indexPath.item];
cell.venueNameLabel.textColor = [UIColor whiteColor];
cell.venueAddressLabel.text = [self.venueAddresses objectAtIndex:indexPath.item];
cell.venueAddressLabel.textColor = [UIColor whiteColor];
[cell setBackgroundColor:[[UIColor grayColor]colorWithAlphaComponent:.1]];
return cell;
}
在包含innerCollectionView
的单元格的实现文件中-(FeaturedEventCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
FeaturedEventCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FeaturedEventCellReuseIdentifier" forIndexPath:indexPath];
cell.eventDateLabel.text = [self.events objectAtIndex:indexPath.item];
cell.eventDateLabel.textColor = [UIColor whiteColor];
cell.eventImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@Flyer%ld.png", self.venueNameLabel.text, (long)indexPath.item +1]];
return cell;
}
在这段代码中,我使用包含单元格标签的值来将与该单元格数据相关的内容加载到innerCollectionView中。
非常直接的实施。结果不是我所期望的。基本上发生的事情是数据被正确加载到outerCollectionView的单元格中,但没有加载到innerCollectionView的单元格中(第一个正确加载,但不是其余的)。同时滚动innerCollectionView中的项目将导致其余单元格中的滚动。
我认为让包含单元格成为innerCollectionView的委托会独立于其他人管理它自己的集合视图。我认为我不理解关于集合视图,出列和重用的基本信息。
嵌套集合视图是一种实现我的场景的好方法吗?我试图查看实现嵌套的集合视图,并且找不到一大堆可能是有原因的?
请解释我在我的案例中做错了什么,或指导我做出正确或更好的解决方案。