UICollectionView allow multiple selection for specific section

bruno picture bruno · Sep 21, 2015 · Viewed 11.7k times · Source

Is there a way to allow multiple selection only for a specific section? The code below affects all sections.

[self.collectionView setAllowsMultipleSelection:YES];

Should i keep track of the states and do something in didSelect?

Answer

redent84 picture redent84 · Sep 21, 2015

You can control cell selection by implementing shouldSelectItemAtIndexPath: method in your UICollectionViewDelegate implementation.

For example, this code allows selection of any number of cells at section 1 but only one cell of any other section:

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

If you require a more complex behavior you can implement it at didSelectItemAtIndexPath. For example, this code will allow multiple selection only at section 1 and will allow only one cell selected at any other section:

- (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];
        }
    }
}