我有一个故事板,我添加了两个集合视图。我将元素拖到我的.h文件中并制作出口。我已经为两个集合视图创建了初始方法,这意味着我有:例如:
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection(NSInteger)section
我还为我的第二个collectionview创建了另一个类似的方法:
-(NSInteger)collectionView2(UICollectionView *)collectionView2 numberOfItemsInSection(NSInteger)section
但问题是当我记录调用哪些方法时,从不调用第二个集合视图的方法 感谢
答案 0 :(得分:2)
当您通过界面构建器将两个集合视图链接到其datasource
和delegate
属性时,它们必须符合UICollectionViewDataSource
和UICollectionViewDelegate
协议。如果他们的委托/数据源对象是同一个东西,那么你必须在你的类中使用相同的方法实现两个集合视图。
您可以通过为视图控制器中的每个集合视图创建一个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..