ios UICollectionView 单元格选择和取消选择问题

Posted

技术标签:

【中文标题】ios UICollectionView 单元格选择和取消选择问题【英文标题】:ios UICollectionView cell selecting and deselecting issue 【发布时间】:2017-11-29 04:46:17 【问题描述】:

我使用 UIcollection 视图作为我的标签栏 当我水平滚动集合视图时,当我选择新单元格时,前一个选定的单元格不会取消选择

这是我选择一个单元格并取消选择一个单元格时更改颜色的代码

  var selectedIndexPath : IndexPath = []
func collectionView(_ collectionView: UICollectionView, 
didSelectItemAt indexPath: IndexPath) 

   if let cell = collectionView.cellForItem(at: indexPath) as? 
   BottomCollectionViewCell 
        cell.contentView.backgroundColor = UIColor.orange
        cell.backgroundColor = UIColor.orange
   

  if let preViousSelectedcell = collectionView.cellForItem(at: 
  selectedIndexPath) as? BottomCollectionViewCell 

     preViousSelectedcell.contentView.backgroundColor=UIColor.purple
     preViousSelectedcell.backgroundColor = UIColor.purple
 
 selectedIndexPath = indexPath



【问题讨论】:

使用collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) 我已经使用了,但没有任何改变。我认为滚动视图时索引路径正在改变。 你能否更新你的答案,展示你是如何使用它的? @Sath.Dev 如果您单击一个已被选中的单元格,则将调用取消选择,而不是如果您选择任何其他单元格。做一些研究,你会得到很多答案。 【参考方案1】:

在重复使用滚动单元格时,cellForItemAt 将调用,因此您需要更改代码中的一些修改

func collectionView(_ collectionView: UICollectionView, 
didSelectItemAt indexPath: IndexPath) 
 selectedIndexPath = indexPath
 YOUR_COLLECTION_VIEW.reloadData()

并在collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 中添加以下行

if indexPath ==  selectedIndexPath 
     cell.contentView.backgroundColor=UIColor.purple
     cell.backgroundColor = UIColor.purple
 else 
     cell.contentView.backgroundColor = UIColor.orange
     cell.backgroundColor = UIColor.orange

希望对你有帮助

【讨论】:

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

IOS:通过长按选择 UICollectionView 单元格

根据文本调整单元格宽度 - UICollectionView - iOS

ios中的UICollectionView单元格滚动问题

如何在 iOS 中动态更改 UICollectionView 单元格高度

将平移手势添加到 UICollectionView 单元 - IOS/Swift

iOS:将 UICollectionView 单元格设置为视图大小