UICollectionView shouldSelectItemAtIndexPath=NO 不会避免取消选择旧选择吗?

2024-04-21

我在 CollectionView 中有多个项目,但只有其中几个应该是可选的。我用委托方法处理这个问题:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath

如果选择了可选择的项目,并且在下一步中,shouldSelectItemAtIndexPath 返回“否”拒绝选择不可选择的项目,则出现我的问题,无论如何都会取消选择选定的项目。

我也尝试过使用

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath

但这是同样的问题。

这是 UICollectionView 正确的期望行为吗?如果是,如果选择了不可选择的项目,如何避免取消选择最后选择的项目?


我必须纠正我的假设:最后的选择不会被取消选择!

为了更改选择时单元格的外观,我重写了 UICollectionViewCell 的 setSelected 访问器。 当选择不可选择的项目时,最后选择的单元格的访问器 setSelected 会被多次调用。首先是“否”状态,然后是“是”状态,最后再次是“否”。最后一个状态 NO 导致我的单元格将其外观设置为未选定单元格的外观。

我不知道这种奇怪行为的原因,也无法解决它。

My 解决方法是直接在 ViewController 中更改选定单元格的外观。

将选定的外观设置为:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

删除选定的外观:

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath

检查是否选择了当前单元格并按预期更改外观。

   - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UICollectionView shouldSelectItemAtIndexPath=NO 不会避免取消选择旧选择吗? 的相关文章

随机推荐