您好我正在尝试根据其indexPath自定义我的collectionviewcell,但如果我设置
if (indexPath.row == 0)
{
[cell addSubView: view];
}
视图在某些单元格中显示为随机。 这是我正在使用的代码
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 15;
}
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
NSInteger row = indexPath.row;
UIView *contentCell = [[UIView alloc] initWithFrame:cell.frame];
if (row == 0)
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(1.0f, 1.0f, 50.0f, 50.0f)];
label.text = @"Test";
[contentCell addSubview:label];
}
[cell addSubview:contentCell];
cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"container"]];
return cell;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%d", indexPath.row);
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(414, 228);
}
答案 0 :(得分:0)
您要多次添加视图作为子视图。由于" dequeueReusableCellWithReuseIdentifier"重复使用单元格,因此在向上和向下滚动后,您将返回已添加子视图的现有视图。
您应该阅读有关重复使用单元格的更多信息。
避免这种行为的一种方法是在创建单元格时创建所有视图,然后只显示/隐藏它们。 否则,为不同的行创建具有不同标识符的单元格 - 在第0行的情况下。
答案 1 :(得分:0)
你必须阅读有关可重复使用的细胞的信息。
你可以通过这样做来避免这个问题。
if (row == 0)
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(1.0f, 1.0f, 50.0f, 50.0f)];
label.text = @"Test";
label.tag = 200;
[contentCell addSubview:label];
}else{
UIView* lbl = [contentCell viewWithTag:200];
if(lbl)
[lbl removeFromSuperView];
}
但这会影响滚动和内存性能,您可以将标签默认放在单元格中&&在if / else块中显示/隐藏它