我正在尝试创建具有自定义tableviewcell
的collectionview
的collectionviewcell
。
我创建了一个具有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以使单元格半透明
可能是什么原因。
最佳答案
要解决此问题,您应该准备好要重复使用的单元格。对prepareForReuse
和UICollectionViewCell
使用称为UITableViewCell
的方法。
像这样实现它,并在您的cellForItemAtIndexPath
中调用它
- (void)prepareForReuse
{
yourImageView .image = nil;
[super prepareForReuse];
}
关于ios - uicollectionViewCell图像向下滚动时更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37317606/