UICollectionView Tap选择多个单元格

时间:2013-01-19 16:11:36

标签: selection uicollectionview uitapgesturerecognizer uicollectionviewcell

当在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;

}

高亮显示代码只在边框上添加边框。

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

1 个答案:

答案 0 :(得分:2)

因为细胞可以重复利用吗?这就是为什么你得到这个结果。

解决方案

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

  2. 从UICollectionViewCell对您的单元格进行子类化,然后覆盖UICollectionViewCell的 prepareForReuse 方法,您必须将已完成的所有格式(在didSelectItemAtIndexPath方法中)重置为其默认值并制作单元格准备再次使用。有关 prepareForReuse 的更多信息,请here

  3. 在cellForRowItemAtIndexPath中再次将相同的格式应用于您首先保存的索引路径的所选单元格。多数民众赞同!

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