2014-02-23 50 views
12

我有一個UICollectionView自定義單元格 - 它們的UITextView大部分都覆蓋整個單元格。這在使用didSelectItemAtIndexPath時會出現問題。觸發它的唯一方法是在UITextView之外點擊。我希望它觸發你點擊的單元格中的任何位置,無論是否有文本視圖。如何才能做到這一點?UICollectionView didSelectItemAtIndexPath在點擊UITextView時不會調用

+1

我會建議使用'UIGestureRecognizer'每個細胞,當它貼在其發送到文本視圖或什麼的,也許還有可能​​是更好的解決方案,但我會用這1個 –

+0

問題通過添加UITapGestureRecognizer(感謝解決@羅馬-MT)和使用indexPathForItemAtPoint: – imas145

+0

然後,我會做出回答:)。 –

回答

4

我會建議使用UIGestureRecognizer爲每個單元格,當它錄製發送到UITextView或任何其他,也許可能有更好的解決方案,但我會使用這1,因爲簡單的原因。

22

didSelectItemAtIndexPathnone of the subView of collectionViewCell respond to that touch時被調用。由於textView響應那些觸動,所以won't forward those touches它的superView,所以collectionView不會得到它。

覆蓋您collectionViewCellCollectionView子類的hitTest:withEvent方法,總是返回從them.so self它明確地使作爲的CollectionView first responder

+0

我將此代碼添加到我的UICollectionViewCell實現中:' - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return self; } '這完全禁用了點擊,現在它甚至在文本視圖外輕觸時都不會觸發。 – imas145

+0

你確定你沒有在UICollectionViewCell中實現touchesBegan方法嗎?你不應該覆蓋單元格中的touchesBegan。 – santhu

+0

問題解決後,我可以告訴你,沒有觸及方法。這裏是代碼,如果你有興趣' - (id)initWithFrame:(CGRect)框架self = [super initWithFrame:frame]; if(self){ //初始化代碼 } return self; } - (void)setTextViewText:(NSString *)text { self.textView.text = text; } - (void)setTitleLabelText:(NSString *)text { self.titleLabel。text = text; }' – imas145

2

你重寫touchesEnded: withEvent:

今天我有同樣的問題,我發現,我在touchesEnded一些定製的邏輯中的CollectionView的容器觀點之一,我沒有叫

[super touchesEnded: withEvent:] 

當我與我的定製邏輯完成在touchesEnded

添加超級通話後,一切都很好。

0

我遇到了這個問題,當我有一個滾動視圖佔用我的整個集合視圖單元格。儘管上述所有解決方案都可能正常工作,但我想出了自己的優雅解決方案。我在我的滾動視圖下放置了一個'選擇'標籤。由於標籤不是滾動視圖的一部分,因此會將點按事件傳遞到收集視圖。它也是一個很好的指標,用戶需要採取措施。

相關問題