【发布时间】:2017-03-26 04:56:48
【问题描述】:
我正在使用具有默认选择规则的UICollectionView(仅限单选)。在我的自定义 UICollectionViewCell 类中,我已经像这样覆盖了 isSelected:
override var isSelected: Bool {
didSet {
self.backgroundColor = isSelected ? UIColor.gray : UIColor.white
}
}
我还在视图控制器的collectionView(_:cellForItemAt:) 中为一个特定单元格设置了isSelected,因为出于某种原因,集合的selectItem() 方法在cellForItemAt 中不起作用。
这使我能够确保在包含集合的整个视图实际出现之前选择了这个单元格并更改了其背景,但这产生了一个奇怪的问题。
当我开始点击其他集合单元格并选择它们时,我从一开始就设置为选中的那个单元格的背景颜色没有设置为白色。
但是,当我通过点击它们依次选择不同的单元格时,它们的背景颜色会按预期切换为白色,而我在集合的初始填充期间设置isSelected 的那个单元格始终保持灰色除非我专门点击它,然后在不同的单元格中点击它。
谁能帮我弄清楚这是为什么?为什么当我点击一个单元格而不是我在cellForItemAt 中设置的isSelected 属性的单元格时,isSelected 没有设置为false?
编辑:我尝试实现collectionView:didDeselectItemAtIndexPath:,但它根本不会触发。因此,一方面,isSelected 属性肯定已设置,因为该单元格的背景变为灰色,但另一方面,该集合似乎并未将该单元格视为已选中 .
【问题讨论】:
-
提供你的
- collectionView(_:cellForItemAt:)方法的代码。 -
只是单元格的标准出列并根据绝对不干扰此的条件设置
cell.isSelected = true。问题是,由于某种原因,点击并因此选择其他单元格不会将初始单元格的isSelected设置为false,但会为所有随后取消选择的单元格设置。 -
您为什么将
cell.isSelected明确设置为true?这是默认实现的工作。你能在你的代码中测试评论cell.isSelected = true吗? -
正如我在原始帖子中提到的那样,我设置了属性,因为出于某种我不知道的原因,
collectionView.selectItem()方法在cellForItemAt中不起作用。所以也许这里有一个我没有看到的更大规模的错误,与最初填充后集合的作用有关? -
也许吧。但为此,我必须看看你的实现。最好看看我下面的答案以了解不同的解决方法。我希望这会有所帮助。
标签: ios swift xcode uicollectionview