3

在 UICollectionView 中点击单个 UICell 然后在 UICollectionView 中向下或向上滚动时,我遇到了一个奇怪的问题,我看到选择了多个单元格。其他未被点击的单元格似乎是在整个 UICollectionView 布局中随机选择的。我在 UICollectionView 中有 3 列单元格和许多行。

在我的代码中,我有以下内容:

- (void)collectionView:(UICollectionView *)myCV didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    LogInfo(@"Item Selected");
    // highlight the cell user tapped on
    UICollectionViewCell  *cell = [myCV cellForItemAtIndexPath:indexPath];
    [cell.layer setBorderWidth:10.0f];
    cell.layer.borderColor = [UIColor colorWithRed: 108/255. green: 166/255. blue: 16/255. alpha:1.0].CGColor;
    cell.layer.CornerRadius = 10;

}

高亮代码只是在点击的单元格上放置一个边框。

有没有办法确保只选择被点击的单元格?

4

1 回答 1

2

是因为细胞可以重复使用吗?这就是你得到这个结果的原因。

解决方案是

  1. 将选定的索引路径保存在某处。

  2. 从 UICollectionViewCell 子类化您的单元格,然后覆盖 UICollectionViewCell 的prepareForReuse方法,您必须从您所做的所有格式设置(在 didSelectItemAtIndexPath 方法中)重置为其默认值,并使单元格准备好再次使用。更多关于prepareForReuse信息在这里

  3. 在 cellForRowItemAtIndexPath 中再次将相同的格式应用于您首先保存的索引路径的选定单元格。就是这样!

但最后,我建议不要直接在这里做任何单元格格式的事情。尝试理解 UICollectionViewLayoutAttributes 并用它来做这些事情。

于 2013-01-22T19:10:34.950 回答