UICollectionView 点击选择多个单元格

Posted

技术标签:

【中文标题】UICollectionView 点击选择多个单元格【英文标题】:UICollectionView Tap Selects More Than One Cell 【发布时间】:2013-01-19 16:11:36 【问题描述】:

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

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

解决办法是

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

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

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

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

【讨论】:

你好,Jirune。感谢您的回复。“将选定的索引路径保存在某处。”你能解释一下我应该把它保存在哪里吗? 嗯。只需声明一个全局 NSIndexPath 变量,然后将选定的 indexpath 分配给该变量,现在基于存储的索引,您只需在 cellForItemAtIndexPath 中应用您的格式就可以了..

以上是关于UICollectionView 点击选择多个单元格的主要内容,如果未能解决你的问题,请参考以下文章

在第二次点击时取消选择 UICollectionView 单元格

选择单元格时 UICollectionView 正在滚动

一个UIViewController中的多个UICollectionView数据源

UICollectionView,单元格选择不起作用,单元格滚动正常

如何从代码中选择 UICollectionView 的项目/单元格

启用分页和每页多个单元格时奇怪的 UICollectionView 行为