UICollectionView reloadData更改单元格顺序

问题描述 投票:2回答:2

我在我的一个项目中使用UICollectionView,当我尝试在集合视图上调用reloadData时,单元格顺序总是相同。 我创建了类似的单元格:

- (UICollectionViewCell *)collectionView:(UICollectionView *)aCollectionView 
                  cellForItemAtIndexPath:(NSIndexPath *)aIndexPath {
    PPhotoCVCell *cell = 
     [self._collectionView dequeueReusableCellWithReuseIdentifier:@"PPhotoCVCell" 
                                                     forIndexPath:aIndexPath];
    if (cell.photo == nil) {
        PPhoto *photo = self._photos[aIndexPath.row];
        cell.photo = photo;
    }

    cell.enableEditing = self._editing;
    cell.layer.shouldRasterize = YES;
    cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

    return cell;
}

单元格有两个类UIImageView的子视图,一个用于图像,另一个用于覆盖,如果用户选择了单元格。 当我处于编辑模式时,用户可以选择单元格。当选择了一些单元格并且用户退出编辑模式时,我在覆盖的alpha方法中将覆盖图像视图的0.0值设置为setSelected:。 问题是当我在集合视图上调用reloadData方法时,所选单元格中的叠加图像视图隐藏而没有动画,但在其他单元格中,叠加图像视图在没有动画的情况下显示,并随着正确的动画消失。 当我打电话给reloadData时,我发现照片的图像视图也在变化。

这个问题有什么解决方案吗?

ios iphone objective-c uicollectionview
2个回答
2
投票

听起来你的细胞正在被回收。在你的细胞qazxsw poi中,确保你正在移除叠加层。然后在qazxsw poi中添加适当的叠加层。


0
投票

我遇到了同样的问题,每次我执行reloadData时,集合视图都会反转它的顺序。由于我在5年后没有看到答案,我发布了我的解决方案以防其他人遇到此问题。

你实际上有两个选择:

  1. 如果您只需要重新加载单个单元格,请使用以下代替reloadData:
prepareForReuse
  1. 如果需要重新加载所有数据,请使用以下命令:
collectionView: cellForItemAtIndexPath:

这个行为可能在某个地方有合理的解释,但我找不到一个。

© www.soinside.com 2019 - 2024. All rights reserved.