我正在实现一个启用了多个选择的UICollectionView。
我的一些细胞是可选择的,有些则不是。这是一系列事件:
YES
shouldHighlightItemAtIndexPath:
shouldSelectItemAtIndexPath:
NO
返回到shouldSelectItemAtIndexPath:
来实现不可选择的方面)didDeselectItemAtIndexPath:
。注意:不会调用shouldDeselectItemAtIndexPath:
。预期结果:没有任何反应。
这是正常行为吗?我在文档中找不到任何内容。如果是这样,我怎么能不去取消我的细胞?
答案 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
这可以通过禁用与单元格的交互来实现。