一个控制器中的多个 UICollectionView

Posted

技术标签:

【中文标题】一个控制器中的多个 UICollectionView【英文标题】:Multiple UICollectionView in one controller 【发布时间】:2012-10-12 00:00:13 【问题描述】:

我用两个 UICollectionViews 设置了一个视图。这些视图中的每一个都有一个以不同大小支持它的数组。 collection1 由 array1 支持,而 collection2 由 array2 支持。问题是,从 numberOfItemsInSection 为 collection1 返回的任何数字都将应用于两个集合视图。

例如,如果 array1 的大小为 4,array2 的大小为 5,则两个集合都将显示 4 个元素。如果 array1 的大小为 5,array2 的大小为 4,当我一直滚动 collection2 时,它会调用 cellForItemAtIndexPath,collection2 的 itemIndex 为 5,我得到一个 NSRangeException。

如何让每个 collectionView 使用它自己的大小?

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section;

    if(view == self.colleciton1)
        return self.array1.count;
     else if (view == self.collection2)
        return self.array2.count;
    

    return 0;


- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;

    if(cv == self.collection1)
        CharacterCell *cell = [cv dequeueReusableCellWithReuseIdentifier:FIRST_CELL_IDENTIFIER forIndexPath:indexPath];
        cell.label.text = self.array1[indexPath.item];
        return cell;
     else if (cv == self.collection2)
        EpisodeCell *cell = [cv dequeueReusableCellWithReuseIdentifier:SECOND_CELL_IDENTIFIER forIndexPath:indexPath];
        cell.label.text = self.array2[indexPath.item];
        return cell;
    

    return nil;

我在一个项目中包含了一个 git 存储库来说明问题。

git@github.com:civatrix/MultipleCollectionViews.git

【问题讨论】:

【参考方案1】:

问题是我为每个集合使用了相同的布局对象。回想起来,这是有道理的,但您必须确保为每个 collectionView 创建不同的布局。

【讨论】:

如何为每个 CollectionView 使用不同的布局?我有一个自定义布局,不让我使用它 我有同样的问题....我为两个集合视图使用了两种不同的布局...但仍然有相同的错误 没错!我对多个 cvs 使用了相同的布局实例,它给了我错误的结果。我通过为每个 cv 使用单独的布局来解决 如何为每个 collectionView 创建不同的布局?【参考方案2】:

使用 ContainerView 并为每个 UICollectionView 拥有两个单独的 UICollectionView 控制器可能会更容易

【讨论】:

好建议。这既可以使代码更清晰,也可以使其更加模块化,这样您就可以在不同的地方重用各个集合视图控制器。【参考方案3】:

你所拥有的应该可以工作。 self.colleciton1 和 self.collection2 是 IBOutlets 吗?如果是这样,您能否再次检查它们是否正确连接?

【讨论】:

一切都已正确连接,我在每个集合视图中都看到了一些元素。

以上是关于一个控制器中的多个 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

单击tableview标题按钮时如何将tableviewcell内的collectionview中的数据显示到另一个视图控制器

UICollectionViewCell 和 UIScrollView

UITableView 单元格方形而不是圆形

多个导航控制器中的视图控制器通信

一个控制器中的多个 UICollectionView

当gestureRecognizerShouldBegin 触发时numberOfTouches 为零