带有两个CollectionView

时间:2015-12-14 16:33:26

标签: objective-c uicollectionview

我有一个故事板,我添加了两个集合视图。我将元素拖到我的.h文件中并制作出口。我已经为两个集合视图创建了初始方法,这意味着我有:例如:

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

我还为我的第二个collectionview创建了另一个类似的方法:

-(NSInteger)collectionView2(UICollectionView *)collectionView2 numberOfItemsInSection(NSInteger)section

但问题是当我记录调用哪些方法时,从不调用第二个集合视图的方法 感谢

2 个答案:

答案 0 :(得分:2)

当您通过界面构建​​器将两个集合视图链接到其datasourcedelegate属性时,它们必须符合UICollectionViewDataSourceUICollectionViewDelegate协议。如果他们的委托/数据源对象是同一个东西,那么你必须在你的类中使用相同的方法实现两个集合视图。

您可以通过为视图控制器中的每个集合视图创建一个IBOutlet来完成此操作,例如:

 @property (nonatomic, strong) IBOutlet UICollectionView *primaryCollectionView;
 @property (nonatomic, strong) IBOutlet UICollectionView *secondaryCollectionView;

然后,您可以在收到回调时从委托方法检查调用者的集合视图,例如:

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection(NSInteger)section {

      if (collectionView == self.primaryCollectionView) {
           return 12;

      } else if (collectionView == self.secondaryCollectionView) {
           return 6;

      } else {
           return 0;
      }
 }

答案 1 :(得分:1)

永远不会调用第二个委托方法,因为它不是UICollectionView的委托方法

UICollectionView视图总是调用第一种方法,因为它可以安抚它的dataSource委托协议。

请查看委托方法本身: -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection(NSInteger)section

你会注意到代表正在通过你想知道这个特定集合视图的(UICollectionView *)collectionView部分中的项目数量; - )

您所要做的就是查询它传递给您的集合视图

if(collectionView == myCollectionView1)
{
//    do stuff for collection view 1
}
else if(collectionView == myCollectionView2)
{
//    do stuff for collection view 2
}
//etc..