UICollectionView Select and Deselect issue
So I have a main object that has many images associated with it. An Image is also an object.
Say you have a collection view controller, and in that controller you have
cellForItemAtIndexPath
well based on the main object, if it has the current image associated with it I want to set selected to true. But I want the user to be able to "un-select" that current cell at any time to remove its association with the main object.
I find that if you set "selected to true" - if there is an relation between the main object and image in cellForItemAtIndexPath
, de-selection is no longer an option.
in
didDeselectItemAtIndexPath
and
didSelectItemAtIndexPath
I test with a log to see if they are called. If a cell is set to selected - nether gets called, but If I never set a cell to selected in cellForItemAtIndexPath
I can select and deselect all I want.
Is this the intended way a collection view is supposed to work? I read the docs and it does not seem to talk about this being so. I interpret the docs to mean it works the way a table view cell would. with a few obvious changes
This also shows the controller is set up correct and is using the appropriate delegate methods.... hmmmm
Solution 1:
I had the same issue, ie. setting cell.selected = YES
in [UICollectionView collectionView:cellForItemAtIndexPath:]
then not being able to deselect the cell by tapping on it.
Solution for now: I call both [UICollectionViewCell setSelected:]
and [UICollectionView selectItemAtIndexPath:animated:scrollPosition:]
in [UICollectionView collectionView:cellForItemAtIndexPath:]
.
Solution 2:
I had a Deselect issue with UICollectionView
and I found that I was not allowing multiple selection on collectionView. So when I was testing I tried always on the same cell and if single selection is ON you can't Deselect a cell already selected.
I had to add:
myCollectionView.allowsMultipleSelection = YES;
Solution 3:
Do you have a custom setSelected
method in your Cell class? Are you calling [super setSelected:selected]
in that method?
I had a mysterious problem where, I was using multiple selection, I could not deselect cells once they were selected. Calling the super method fixed the problem.
Solution 4:
This is kind of old but, since I encounter the same issue using swift I will add my answer. When using:
collectionView.selectItemAtIndexPath(indexPath, animated: true, scrollPosition: [])
The cell didn't get selected at all. But when using:
cell.selected = true
It did get selected but I wasn't able to select/deselect the cell anymore.
My solution (use both methods):
cell.selected = true
collectionView.selectItemAtIndexPath(indexPath, animated: true, scrollPosition: .None)
When this two methods are called in:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
It worked perfectly!