UICollectionView滚动问题

时间:2013-09-09 18:15:43

标签: ios objective-c uicollectionview

我正在使用收藏视图来显示卡片#39;当用户点击其中一张卡时,视图会随着翻转动画而改变(到另一侧' - 通过didSelectItemAtIndexPath中调用的函数)。如果用户触摸这些卡中的另一张,他们可以点击另一张卡,旧卡将翻转回旧视图,新卡将翻转到新视图。或者,他们可以再次点击原始卡并将其翻转。

问题

这很有效,除了在滚动视图中滚动到卡片时,其他卡片似乎被翻转。例如,我在集合视图中翻转第一张卡片(索引:0)。这翻转很好。我向下滚动,索引9的单元格出现翻转。

我尝试了什么

我环顾四周,虽然我可以看到很多与UICollectionView和滚动有关的问题,但我无法弄清楚它们是什么,不是什么。我还使用NSLog来确定是否已经通过程序选择并翻转了随机翻转的视图卡,并且它们没有。他们似乎只是。

我真的坚持这个想法。有人有任何想法吗?它是由于我创造细胞的方式? 在我的viewDidLoad我正在使用:(其中cellImage是我的单元格的自定义类)

[self.collectionView registerClass:[cellImage class] forCellWithReuseIdentifier:@"MY_CELL"];

和我的cellForItemAtIndexPath:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; {
cellImage *cell = [cv dequeueReusableCellWithReuseIdentifier:@"MY_CELL" forIndexPath:indexPath];
cell.imageView.image = [UIImage imageNamed:[imageArray objectAtIndex:indexPath.item]];
[cell.label addSubview:cell.imageView];
cell.label.backgroundColor = [UIColor whiteColor];
cell.label.layer.borderColor =  [UIColor grayColor].CGColor;
cell.label.layer.borderWidth  = 1.0f;

return cell;
}

有人有什么想法吗?如果您需要更多代码,请给我一个大喊,谢谢!

2 个答案:

答案 0 :(得分:1)

在配置可重复使用的单元格(cellForItemAtIndexPath)的方法中,您必须显式设置这两种状态。否则,回收的细胞不会自行更新。

image = isFlipped ? backImage : cardImage;

您应该拥有一个可以可靠地返回阵列中任何卡的当前翻转状态的数据模型。

答案 1 :(得分:0)

您可以覆盖自定义UICollectionViewCell的- (void)prepareForReuse方法,以便在重用之前将单元格返回到默认状态。