Reputation: 1979
I have a UICollectionView
with custom cells- They have a UITextView
that mostly covers the entire cell. This presents a problem when using didSelectItemAtIndexPath
. The only way to trigger it is by tapping outside the UITextView
. I want it to trigger wherever in the cell you tap, whether there is a text view or not. How can this be done?
Upvotes: 17
Views: 20815
Reputation: 6550
Select UITextView
, in that specific case UICollectionViewCell
, and switch to attribute inspector. The uncheck User interaction enabled and it should work fine.
Upvotes: 1
Reputation: 3307
I ran into this problem when I had a scroll view taking up my entire collection view cell. While all the solutions above probably work fine, I came up with my own elegant work-around. I put a 'select' label under my scroll view. Since the label is not part of the scroll view, it passes the tap event on to the collection view. It also serves as a nice indicator that an action is required of the user.
Upvotes: 0
Reputation: 101
Do you override touchesEnded: withEvent:
?
I had the same problem today and I found that I have some customised logic in touchesEnded
in one of collectionview's container views, and I didn't call
[super touchesEnded: withEvent:]
when I'm done with my customised logic in touchesEnded
.
After adding the super call, everything is fine.
Upvotes: 2
Reputation: 3512
I would suggest to use UIGestureRecognizer
for each cell and when it taped to send it to UITextView
or whatever , perhaps there maybe a better solutions , but I would use this 1 because of simplicity reasons.
Upvotes: 3
Reputation: 4792
didSelectItemAtIndexPath
is called when none of the subView of collectionViewCell respond to that touch
. As the textView
respond to those touches, so it won't forward those touches
to its superView, so collectionView won't get it.
override hitTest:withEvent
method of your collectionViewCell
or CollectionView
subclass and always return self
from them.so it explicitly makes collectionView as first responder
.
Upvotes: 29