UICollectionView允许对特定部分进行多项选择

时间:2015-09-21 14:37:52

标签: ios uicollectionview uicollectionviewcell didselectrowatindexpath

有没有办法只允许特定部分进行多项选择?以下代码会影响所有部分。

[self.collectionView setAllowsMultipleSelection:YES];

我应该跟踪状态并在didSelect中执行某些操作吗?

1 个答案:

答案 0 :(得分:7)

您可以通过在UICollectionViewDelegate实施中实施shouldSelectItemAtIndexPath: method来控制小区选择。

例如,此代码允许在第1部分选择任意数量的单元格,但只允许选择任何其他部分的一个单元格:

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    return collectionView.indexPathsForSelectedItems.count == 0 && indexPath.section == 1;
}

如果您需要更复杂的行为,可以在didSelectItemAtIndexPath实施。例如,此代码仅允许在第1部分进行多项选择,并且只允许在任何其他部分选择一个单元格:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 1)
        return;

    NSArray<NSIndexPath*>* selectedIndexes = collectionView.indexPathsForSelectedItems;
    for (int i = 0; i < selectedIndexes.count; i++) {
        NSIndexPath* currentIndex = selectedIndexes[i];
        if (![currentIndex isEqual:indexPath] && currentIndex.section != 1) {
            [collectionView deselectItemAtIndexPath:currentIndex animated:YES];
        }
    }
}