uicollectionviewheader只在第一个单元格上被调用一次



我现在正在为我的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基础上调用您的数据。我希望没有人像我一样在这个问题上挣扎。

相关内容

  • 没有找到相关文章

最新更新