【发布时间】:2013-08-24 15:17:26
【问题描述】:
最终结果是在一个视图控制器上拥有 2 个集合视图。来自不同来源的拉动以及一个应该水平滚动而另一个垂直滚动。
请告知如何以编程方式实现这一目标。
【问题讨论】:
标签: ios uiviewcontroller uicollectionview
最终结果是在一个视图控制器上拥有 2 个集合视图。来自不同来源的拉动以及一个应该水平滚动而另一个垂直滚动。
请告知如何以编程方式实现这一目标。
【问题讨论】:
标签: ios uiviewcontroller uicollectionview
我之前没有使用过UICollectionView,但由于它继承自 UIScrollView,我想它与UITableView 非常相似。
当使用一个 CollectionView 时,我假设您必须设置 collectionView.delegate = self; 和 collectionView.dataSource = self,并在 .h 文件中,确保您的班级使用 <UICollectionViewDelegate, UICollectionViewDataSource> 或类似的东西。当您将 collectionView 的委托设置为您自己的视图 (self) 时,您要确保为 collectionView 提供的数据来自您自己的类,在委托方法中。我相信您已经知道这一点,因为使用一个 collectionView 应该非常简单。
当你使用两个collectionViews时,你必须设置
collection1.delegate = self;
collection2.delegate = self;
collection1.dataSource = self;
collection2.dataSource = self;
这会反过来让两个 collectionView 都调用委托方法。
例如,委托方法-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 是否等于collection1 或collection2。委托方法提供collectionView 作为它调用该方法的 UICollectionView,并且必须是两者之一。但是,如果您为 collectionView 调用了您的 collectionView 之一,这可能看起来很可疑,因此请务必按逻辑命名它们。
【讨论】:
if(collectionView == collection1) 更改为 if ([collectionView isEqual:collection1]) 以正确测试相等性。