imas145
imas145

Reputation: 1979

UICollectionView didSelectItemAtIndexPath not called when tapped on UITextView

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

Answers (6)

Enamn_dev
Enamn_dev

Reputation: 55

Just do this

textview.isUserInteractionEnabled = false 

Upvotes: 1

Stefano Mtangoo
Stefano Mtangoo

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

Justin Domnitz
Justin Domnitz

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

frankli
frankli

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

Coldsteel48
Coldsteel48

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

santhu
santhu

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

Related Questions