向上向下滚动时,collectionViewCell 图像发生变化
Posted
技术标签:
【中文标题】向上向下滚动时,collectionViewCell 图像发生变化【英文标题】:collectionViewCell Images change when scrolling up down 【发布时间】:2016-05-19 08:17:00 【问题描述】:我正在尝试创建一个具有collectionview
的tableviewcell
,该collectionview
具有一个自定义collectionviewcell
。
我创建了一个控制器,具有自定义tableviewcell
。 TableViewCell 嵌入了collectionview
。现在我用 image 和 text 创建了一个自定义collectioncell
。
在collectionViewcell
中,第四张图像需要是半透明的,所以当我在 cellforitematindex 中渲染图像时,我会使图像半透明。在我向下和向上滚动表格视图之前,它完全可以正常工作。向上滚动后,第一张图片变为半透明。
我在网上看到collectionviewcell
可以重复使用,可能是第 4 个在第 1 位置重复使用的,第 1 位置获得半透明图像
我有一个控制器类,它是 tableviewcell 和 collectionviewcell 的数据源和委托。
I have tableviewcell class.
I have collectionviewcell class.
现在我得到一个链接来解决这个问题,它说你必须继承你的 collectionviewcell
并添加一些方法,这将使 imageview
每次都为零,它将创建一个新的 imageview
。
Link for the above
所以我创建了一个 collectionviewcell 子类
I have a subclass of collectionviewcell : uicollectionviewsubclass
在我的控制器中,首先我重用 tablecell
所以我创建了一个控制器让我们说:-
mycontroller 并添加了一个 tableview ,我添加了一个自定义 tableviewcell ,
在 cellForRowAtIndexPath
我 dequeueReusableCellWithIdentifier ,所以我的 tableviewcell 会来。现在在我的 tableViewcell .m 文件中,我为 collectionview 创建了一个出口,并使用我制作的标签
self.collectionview = [self.contentView viewWithTag:tagno];
这个标签是一个collectionviewcell标签
现在我在tableviewcell
类中注册collectionview
,它有collectionview
的出口
[self.collectionview registerClass:[uicollectionviewsubclass class] forCellWithReuseIdentifier:@"reuseidentifier"];
在我的collectionviewcell
中,我有imageview
插座和其他插座
当我创建子类时,我创建的就像链接中所说的那样。
然后在我的控制器中 cellForItemAtIndexPath 为 collectionview
uicollectionviewsubclass *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"reuseidentifier" forIndexPath:indexPath];
但是这个单元格是一个子类单元格,它没有用于 imageview 的出口(它在 collectionview 类中) 所以它在 self 中将 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 以制作单元格 半透明
可能是什么原因。
【问题讨论】:
你能给我们看看collection view cellforitematindex的代码吗? 我按照你的要求把它放在那里了@Alok 还有一件事是如何添加 ImageCellView 的?将其添加到 cell.contentView 或直接添加到 [cell addSubview:ImageCellView]; ? 通过标记集合视图将其添加到 cell.contentview 什么?通过标记集合视图?如果您在上面发布的 cellForItem.. 中进行调试,它是 nil 吗?非常令人困惑的行“但是这个单元格是一个子类单元格,没有用于 imageview 的出口”?那么有出口有什么问题吗? 【参考方案1】:要解决此问题,您应该准备好您的单元格以供重复使用。对UICollectionViewCell
和UITableViewCell
使用称为prepareForReuse
的方法。
像这样实现它并在你的cellForItemAtIndexPath
中调用它
- (void)prepareForReuse
yourImageView .image = nil;
[super prepareForReuse];
【讨论】:
【参考方案2】:我发现了你的代码中的空白:
简单:您错过了其他部分,请参见下文:
- (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;
else
cell.grayViewImage.hidden = TRUE;
return cell;
谢谢!
【讨论】:
以上是关于向上向下滚动时,collectionViewCell 图像发生变化的主要内容,如果未能解决你的问题,请参考以下文章
React - 向下滚动时向上滑动固定导航栏,向上滚动时向下滑动
使用 jQuery 在向上滚动和向下滚动时添加不同的 CSS 动画