向上向下滚动时,collectionViewCell 图像发生变化

Posted

技术标签:

【中文标题】向上向下滚动时,collectionViewCell 图像发生变化【英文标题】:collectionViewCell Images change when scrolling up down 【发布时间】:2016-05-19 08:17:00 【问题描述】:

我正在尝试创建一个具有collectionviewtableviewcell,该collectionview 具有一个自定义collectionviewcell。 我创建了一个控制器,具有自定义tableviewcell。 TableViewCell 嵌入了collectionview。现在我用 imagetext 创建了一个自定义collectioncell

collectionViewcell 中,第四张图像需要是半透明的,所以当我在 cellforitematindex 中渲染图像时,我会使图像半透明。在我向下和向上滚动表格视图之前,它完全可以正常工作。向上滚动后,第一张图片变为半透明。

我在网上看到collectionviewcell 可以重复使用,可能是第 4 个在第 1 位置重复使用的,第 1 位置获得半透明图像

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

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 插座和其他插座

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

然后在我的控制器中 cellForItemAtIndexPathcollectionview

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】:

要解决此问题,您应该准备好您的单元格以供重复使用。对UICollectionViewCellUITableViewCell 使用称为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 动画

Android:向上滚动时显示工具栏(向上拖动),向下滚动时隐藏(向下拖动)

向下滚动时隐藏标题,向上滚动时显示

如何在快速向上或向下滚动时退出键盘? [关闭]

向上滚动和向下滚动时导航按钮的颜色变化