我正在尝试创建具有自定义tableviewcellcollectionviewcollectionviewcell
我创建了一个具有Custom tableviewcell的控制器。 TableViewCell已嵌入collectionview。现在,我使用图像和文本创建了一个自定义collectioncell

collectionViewcell中,第四张图像需要是半透明的,因此当我在cellforitematindex中渲染图像时,我会使图像变为半透明的。直到我上下滚动tableview时,它才能正常工作。向上滚动后,第一个图像变为半透明。

我在网上阅读了collectionviewcell可供重用的情况,它可能是第4个在第1个位置重用的图片,第一个位置获得了半透明图像

我有一个控制器类,它是tableviewcell和collectionviewcell的数据源和委托。

I have tableviewcell class.
I have collectionviewcell class.


现在我得到一个链接来解决这个问题,它说您必须将collectionviewcell子类化,并添加一些使imageview每次变为nil的方法,这将创建一个新的imageview

Link for the above

所以我创建了一个collectionviewcell子类

I have a subclass of collectionviewcell : uicollectionviewsubclass


在我的控制器中,首先我重用了表格单元格

所以我创建了一个控制器让我们说:-

mycontroller并添加了tableview,我添加了自定义tableviewcell,
cellForRowAtIndexPath处,我dequeueReusableCellWithIdentifier,所以我的tableviewcell会来。现在,在我的tableViewcell .m文件中,我为collectionview创建了一个出口,并通过使用标记使

self.collectionview = [self.contentView viewWithTag:tagno];



  这个标签是一个collectionviewcell标签


现在我在collectionview类中注册了tableviewcell,它具有collectionview的出口

[self.collectionview registerClass:[uicollectionviewsubclass class] forCellWithReuseIdentifier:@"reuseidentifier"];

在我的collectionviewcell中,我有imageview个出口和其他出口

当我创建子类时,我就像在链接中所说的那样创建了。

然后在我的控制器中的cellForItemAtIndexPath中进行collectionview

uicollectionviewsubclass *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"reuseidentifier" forIndexPath:indexPath];


但是此单元格是一个子类的单元格,该单元格没有用于imageview的出口(这在collectionview类中)
因此它在自身中显示imageView为nil,未实例化。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

     ImageCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"ImageCell" forIndexPath:indexPath];
    cell.ImageCellView.image  = [UIImage imageWithData: imageData];
    if (indexPath.row == 3) {
            cell.grayViewImage.hidden = FALSE;
    }
    return cell;
}



  grayViewImage是一个uiview,我将其隐藏为false以使单元格
  半透明


可能是什么原因。

最佳答案

要解决此问题,您应该准备好要重复使用的单元格。对prepareForReuseUICollectionViewCell使用称为UITableViewCell的方法。
像这样实现它,并在您的cellForItemAtIndexPath中调用它

- (void)prepareForReuse
{
    yourImageView .image = nil;
    [super prepareForReuse];
}

关于ios - uicollectionViewCell图像向下滚动时更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37317606/

10-11 00:32