【问题标题】:UICollectionView selection does not lastUICollectionView 选择不会持续
【发布时间】:2014-09-17 07:09:19
【问题描述】:

我有一个UICollectionView,就像一个工具选择容器一样使用。您有许多工具(单元格),当您选择一个时,前一个被取消选择,等等......您一次只能选择一个工具。

问题是我无法选择单元格。当我点击单元格时,会调用 collectionView:didSelectItemAtIndexPath:。然后,我使用[collectionView reloadItemsAtIndexPaths:@[indexPath]] 重新加载选定的单元格以更改其外观(我更改了图像的alpha)。

好吧,这会重新加载单元格,除了一件该死的事情:在collectionView:cellForItemAtIndexPath: 中,单元格永远不会将selected 属性设置为YES!所以我永远无法更改alpha,因为我不知道何时必须绘制选定的单元格。

更糟糕的是:[collectionView indexPathsForSelectedItems] 总是空的!!!

我什至没有提到从未调用过的collectionView:didDeselectItemAtIndexPath:...

好吧,如果有人可以帮助我了解发生了什么,在此先感谢...

【问题讨论】:

  • +1.. 好问题。我已尝试解决您的问题。但我失去了控制:)
  • 感谢您的尝试,您可以停止@daltonclaybrook 的解决方案!

标签: ios objective-c selection uicollectionview uicollectionviewcell


【解决方案1】:

当您调用reloadItemsAtIndexPaths: 时,集合视图会丢弃这些单元格并创建新单元格,从而丢弃单元格的选定状态。

我建议几个不同的选择:

1.) 在collectionView:didSelectItemAtIndexPath: 中调用cellForItemAtIndexPath: 以获取对选定单元格的引用并在此处更新其外观。

2.)(我的最爱)如果您还没有使用 UICollectionViewCell 的自定义子类,并覆盖方法 setSelected:。当单元格被选中时,您会收到通知,您可以从子类中更新外观。

【讨论】:

  • 谢谢!当我使用自定义子类时,我使用了第二个。格拉茨!
【解决方案2】:

关于一次选择多个单元格,您应该尝试allowsMultipleSelection 属性[myCollectionView setAllowsMultipleSelection:YES] 的文档在这里:https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionView_class/Reference/Reference.html#//apple_ref/occ/instp/UICollectionView/allowsMultipleSelection

否则,@daltonclaybrook 的回答就足够了。

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多