UICollectionView在禁用allowMultipleSelection时启用取消选择单元格

时间:2015-09-06 12:52:28

标签: ios objective-c uicollectionview uicollectionviewcell

何时

collectionView.allowsMultipleSelection = YES;

我可以取消选择已选择的细胞。

何时

collectionView.allowsMultipleSelection = NO;

我无法取消选择已选择的细胞。

无论如何我只能设置

collectionView.allowsMultipleSelection = NO;

能够取消选择所选单元格吗?所以选择一个或不选择一个。

我知道您可以通过点击手势实现自己的选择,然后在检测到手势时调用setSelected。但我正在寻找更原生的解决方案,你可以在uicollectionView本身上配置。

谢谢!

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,无法找到原生解决方案。这就是我最终做到这一点,有点hacky但它​​做了所需要的。我在self.collectionView.allowsMultipleSelection = YES设置了viewDidLoad

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    for (NSIndexPath *selectedIndexPath in [self.collectionView indexPathsForSelectedItems]) {
        [self.collectionView deselectItemAtIndexPath:selectedIndexPath animated:NO];
    }
    [collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
}


- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
    [collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
    [collectionView deselectItemAtIndexPath:indexPath animated:YES];
}

didDeselectItemAtIndexPath中的附加选择和取消选择是为取消选择设置动画 - 这种方法提供了额外的好处,能够为过渡设置动画。