我现在正在为我的UICollectionView实现一个头,我现在正在挣扎,因为头只在第一个单元格上被调用一次。
这就是我所做的-我声明UICollectionViewFlowLayout以编程方式制作一个UICollectionView -在这种情况下,pickView。然后我添加了两个xib文件,一个用于cell,另一个用于header。我已经像这样将这些文件注册到集合视图中:
UICollectionViewFlowLayout *layout2 = [[UICollectionViewFlowLayout alloc] init];
self.pickView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, pointView_y, pointView_width, pointView_length) collectionViewLayout:layout2];
self.pickView.backgroundColor = [UIColor whiteColor];
[self.pickView registerNib:[UINib nibWithNibName:@"TodayCollectionViewCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"TodayCollectionViewCell"];
[self.pickView registerNib:[UINib nibWithNibName:@"PickCollectionReusableView" bundle:[NSBundle mainBundle]] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"PickCollectionReusableView"];
//layout2.headerReferenceSize = CGSizeMake(_screenWidth, 50);
[self.pickView setDataSource:self];
[self.pickView setDelegate:self];
[self.view addSubview:self.pickView];
然后我像这样声明标题视图的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
return CGSizeMake([Util screenWidth], 50);
}
最后我调用viewForSupplementaryElementOfKind
来像这样调用头文件:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
PickCollectionReusableView *reusableview = (PickCollectionReusableView*) [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"PickCollectionReusableView" forIndexPath:indexPath];
PickCellVariable *buf = (PickCellVariable*) _pickArray[indexPath.row];
NSLog(@"buf id = %@, SECTION = %lu", buf.itemID, (long)indexPath.row);
if(buf != nil) {
//reusableview.thumbPic = ;
[reusableview.brandName setTitle:[NSString stringWithFormat:@"%lu", (long)indexPath.row] forState:UIControlStateNormal];
[[reusableview brandName] setBrandName:buf.brandname];
[[reusableview brandName] addTarget:self action:@selector(brandClick:) forControlEvents:UIControlEventTouchUpInside];
[[reusableview settingButton] addTarget:self action:@selector(setting:) forControlEvents:UIControlEventTouchUpInside];
return reusableview;
}
else {
[[reusableview brandName] setBrandName:@""];
return reusableview;
}
}
我放置了断点并添加了NSLog行,以确保viewForSupplementaryElementOfKind
只在第一个单元格中被调用一次。
我试图找到像我这样的情况,但大多数关于UICollectionView头的问题是当他们注册类而不是注册xib文件,或者他们忘记设置头视图的大小。我的函数只调用一次所以这和重叠无关。我的集合视图是编程的,所以我现在不重新定义任何东西。
有什么问题吗?拜托,任何东西都可以帮上忙。
谢谢。
好的,所以我的问题是,我调用我的row
基础上的数据。然而,为了使标题出现在每个单元格上,您必须在section
基础上调用您的数据。我希望没有人像我一样在这个问题上挣扎。