UICollectionView选择不会持久化

3
我有一个类似于工具选择容器的UICollectionView。您有许多工具(单元格),当您选择一个时,以前选择的将被取消选择,依此类推...您一次只能选择一个工具。
问题在于我无法管理已选择的单元格。当我点击单元格时,会调用collectionView:didSelectItemAtIndexPath:方法。然后,我重新加载选定的单元格以更改其外观(我更改图像的alpha)使用[collectionView reloadItemsAtIndexPaths:@[indexPath]]
好吧,这样可以重新加载单元格,除了一个可恶的问题:在collectionView:cellForItemAtIndexPath:中,单元格从未将selected属性设置为YES!因此,我永远无法更改alpha,因为我永远不知道何时必须绘制已选择的单元格或未选择的单元格。
更糟糕的是:[collectionView indexPathsForSelectedItems]始终为空!
我甚至没有提到collectionView:didDeselectItemAtIndexPath:,它从未被调用...
如果有人能帮助我理解发生了什么,先感谢了...

+1.. 很好的问题。我尝试解决了您的问题。但是我失去了控制 :) - Shamsudheen TK
感谢您的尝试,您可以停止了,因为@daltonclaybrook的解决方案是正确的! - Zaphod
2个回答

7
当您调用reloadItemsAtIndexPaths:时,集合视图会丢弃那些单元格并创建新的单元格,因此放弃了单元格的选定状态。
我建议几种不同的选择:
1.) 在collectionView:didSelectItemAtIndexPath:中调用cellForItemAtIndexPath:以获取对所选单元格的引用,并在那里更新其外观。
2.)(我最喜欢的)如果您还没有使用,请使用UICollectionViewCell的自定义子类,并覆盖setSelected:方法。 在那里,当选中单元格时,您将收到通知,并且可以从子类中更新外观。

谢谢!我使用了第二个,因为我在处理自定义子类。祝贺! - Zaphod

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接