UICollectionView didSelectItemAtIndexPath not call

2019-04-04 13:25发布

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?

4条回答
劳资没心,怎么记你
2楼-- · 2019-04-04 13:54

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.

查看更多
霸刀☆藐视天下
3楼-- · 2019-04-04 13:54

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.

查看更多
贪生不怕死
4楼-- · 2019-04-04 13:58

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.

查看更多
劳资没心,怎么记你
5楼-- · 2019-04-04 14:00

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.

查看更多
登录 后发表回答