我有UICollectionView
个自定义单元格 - 他们有一个UITextView
,主要覆盖整个单元格。使用didSelectItemAtIndexPath
时出现问题。触发它的唯一方法是点击UITextView
之外。我想让它在您点击的单元格中的任何位置触发,无论是否有文本视图。怎么办呢?
答案 0 :(得分:24)
didSelectItemAtIndexPath
时会调用 none of the subView of collectionViewCell respond to that touch
。由于textView
会对这些触摸做出响应,因此它会超级won't forward those touches
,因此collectionView无法获得它。
覆盖hitTest:withEvent
或collectionViewCell
子类的CollectionView
方法,并始终从它们返回self
。因此它明确地将collectionView设为first responder
。
答案 1 :(得分:4)
我建议对每个单元格使用UIGestureRecognizer
,并在录制时将其发送到UITextView
或其他任何内容,也许可能有更好的解决方案,但由于简单原因,我会使用此1。
答案 2 :(得分:2)
您是否覆盖touchesEnded: withEvent:
?
今天我遇到了同样的问题,我发现我在touchesEnded
的一个collectionview的容器视图中有一些自定义逻辑,我没有调用
[super touchesEnded: withEvent:]
当我完成touchesEnded
中的自定义逻辑时。
添加超级电话后,一切都很好。
答案 3 :(得分:0)
当我有一个滚动视图占用我的整个集合视图单元格时,我遇到了这个问题。虽然上面的所有解决方案都可能正常工作,但我想出了自己优雅的解决方案。我把一个' select'滚动视图下的标签。由于标签不是滚动视图的一部分,因此它会将tap事件传递到集合视图。它还可以作为一个很好的指标,表明用户需要采取行动。
答案 4 :(得分:0)
答案 5 :(得分:0)
只需执行
textview.isUserInteractionEnabled = false