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?
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
.
我建议对每个单元格使用UIGestureRecognizer
,并在它录制时将其发送到UITextView
或其他任何东西,也许有更好的解决方案,但由于简单的原因,我会使用这个 1。
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.
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.
就这样做
textview.isUserInteractionEnabled = false
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.