在点击不可选择的单元格之后,取消选择先前选择的UICollectionViewCells

时间:2014-02-04 23:56:21

标签: ios objective-c uikit uicollectionview uicollectionviewcell

我正在实现一个启用了多个选择的UICollectionView。

我的一些细胞是可选择的,有些则不是。这是一系列事件:

  1. 我选择了几个单元格,点击它们并返回YES
    • shouldHighlightItemAtIndexPath:
    • shouldSelectItemAtIndexPath:
  2. 我尝试通过点击它来选择一个不可选择的单元格(通过将NO返回到shouldSelectItemAtIndexPath:来实现不可选择的方面)
  3. 结果:取消选择所有选定的单元格并在其上调用didDeselectItemAtIndexPath:。注意:不会调用shouldDeselectItemAtIndexPath:
  4. 预期结果:没有任何反应。

    这是正常行为吗?我在文档中找不到任何内容。如果是这样,我怎么能不去取消我的细胞?

2 个答案:

答案 0 :(得分:5)

我不得不面对完全相同的问题,collectionView:shouldDeselectItemAtIndexPath:没有被调用。我的解决方案包括手动重新选择当前选定的单元格,如果我点击一个不可选择的单元格:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    BOOL isSelectable = /* decide if currently tapped cell should be selectable */;

    NSIndexPath *selectedItemIndexPath = /* NSIndexPath of the current selected cell in the collection view, set in collectionView:didSelectItemAtIndexPath: */;

    if (!isSelectable) {
        // the cell isn't selectable, we have to reselect the previously selected cell that has lost selection in the meanwhile
        // without reloading first the cell the selection is not working...
        [collectionView reloadItemsAtIndexPaths:@[selectedItemIndexPath]];
        [collectionView selectItemAtIndexPath:selectedItemIndexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
    }

    return isSelectable;
}

如果您的集合视图正在滚动(隐藏当前选定的单元格),请记住重新选择collectionView:cellForItemAtIndexPath:中的单元格。

我不太喜欢这个解决方案,它也是" hacky"但它确实有效。我期望在collectionView:shouldDeselectItemAtIndexPath:中完成所有逻辑,但它没有被调用,我也不明白为什么。

答案 1 :(得分:5)

MyFullDataClass

这可以通过禁用与​​单元格的交互来实现。