如何在一个Viewcontroller上添加两个CollectionView?

时间:2013-08-22 03:26:16

标签: ios uiviewcontroller uicollectionview

最终结果是在一个视图控制器上有2个集合视图。从不同的来源拉动,一个应该水平滚动,而另一个垂直滚动。

请告知如何以编程方式实现此目的。

1 个答案:

答案 0 :(得分:24)

之前我没有使用UICollectionView,但是当它继承自UIScrollView时,我有机会与UITableView非常相似。

使用一个CollectionView时,我假设您必须设置collectionView.delegate = self;collectionView.dataSource = self,并在.h文件中确保您的班级正在使用<UICollectionViewDelegate, UICollectionViewDataSource>或类似的东西。当您将collectionView的委托设置为您自己的视图(self)时,您确保为delegView提供的数据来自您自己的类,在delegate-methods中。我相信你已经知道了,因为单一的collectionView应该非常简单。

当您使用两个collectionView时,您必须设置

collection1.delegate = self;
collection2.delegate = self;
collection1.dataSource = self;
collection2.dataSource = self;

这将使这两个collectionViews都调用委托方法。 例如,委托方法-collectionView:cellForItemAtIndexPath:将被调用两次。一次用于collection1,一次用于collection2。

为了确保他们获得发送给他们的正确数据,您应该在每个委托和dataSource方法的开头创建一个简单的检查,如下所示:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if(collectionView == collection1)
    {
        //return cell for collection1
    }
    else
    {
        //return cell for collection2
    }
}

在这里,我正在检查collectionView是否等于collection1collection2。委托方法提供collectionView作为它调用方法的UICollectionView,并且必须是两者中的任何一个。如果你为collectionView调用了一个collectionView,这看起来很可疑,所以一定要在逻辑上命名它们。