[英]UICollectionView only calling didSelectItemAtIndexPath if user double taps, will not call when user single taps
我有一個大小與屏幕大小相同的UICollectionView。 它顯示的UICollectionViewCells與collectionView的大小相同。 每個細胞都有一個UIImage,它是細胞的大小。 CollectionView啟用了分頁,因此它實際上是用戶可以滑動的全屏照片幻燈片。
問題是
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
只有當用戶在一個單元格上用兩根手指敲擊或用一根手指長按然后釋放時才會調用-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
。 它似乎沒有單擊選擇的默認行為。 我沒有對CollectionView手勢識別器進行任何更改,因此無法找到解決此問題的方法。
你確定你沒有意外覆蓋- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
? Xcode的代碼完成后,“選擇”與“取消選擇”在過去使我絆倒了。
我只是遇到了同樣的問題,結果UITapGestureRecognizer
在包含UICollectionView
的UIView
有一個UICollectionView
,它正在響應。
這就解釋了為什么didSelectItemAtIndexPath
僅在用戶用兩根手指敲擊或用一根手指長UITapGestureRecognizer
因為這不會觸發UITapGestureRecognizer
。
所以,檢查你到那里的所有UITapGestureRecognizer
,不一定直接在UICollectionView
,但它可以在包含它的任何UIView
。
如果您對單元格有一個視圖阻礙了難以處理的單元格內容視圖,那么您將無法掛鈎該單元格的委托回調。
您將需要在NIB或代碼中禁用阻塞視圖上的用戶交互。
view.userInteractionEnabled = NO;
只需添加已經解決的問題,可能無法使用點擊手勢,因為這確實會讓我感到痛苦。
如果在UICollectionViewDelegate'
的collectionView:shouldHighlightItemAtIndexPath:
返回false
,則點擊手勢將不起作用,並且不會調用collectionView:didSelectItemAtIndexPath:
collectionView:shouldHighlightItemAtIndexPath:
此委托方法的默認返回值為true
,因此如果您沒有故意實現它,則不會出現問題。
我自己也遇到了這個問題。 最初我有按鈕和標簽,然后我重構了我的UI並將這些按鈕/標簽轉換為UICollectionView
單元格。
我終於意識到按鈕正在消耗我的水龍頭。 我不假思索地將原來的按鈕移動到單元格中,而不是將它變成直的UIImage
。 我已經破壞了相關按鈕的動作,只是在尋找細胞選擇,所以我花了一些時間來弄明白。
回想起來很愚蠢和明顯,但花了我幾個小時才意識到我做了什么。
我只是遇到了同樣的問題......我在CollectionCell視圖中覆蓋了touchesBegan,這導致didSelectItemAtIndexPath在我觸摸單元格時不會觸發。 刪除了覆蓋,一切正常。
如果你只使用didselect:
self.collectionView.allowsMultipleSelection = false
或刪除該行。
我在Swift 3和xcode 8中遇到了這個問題,我在這里有一個視圖和一個集合視圖。集合視圖將userInteractionEnabled設置為true,仍然無法正常工作。通過覆蓋shouldHighlightItemAt修復此問題,我沒有任何額外的/這個方法中的自定義實現,所以我沒有覆蓋這個方法。添加下面的代碼后,調用didSelectItem方法。
func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
return true
}
我碰巧偶然發現了這個問題,在我找到這個問題之后,我感到非常沮喪。當我在Storyboard的CollectionView中選擇了左上方的Cell時, 你只需要取消選中“User Interaction Enabled” 。 問題解決了
就我而言,它只是
self.collectionView.allowsSelection =NO;
我有代碼。
換到
self.collectionView.allowsSelection =YES;
修理它。
我遇到了類似的問題,我的案件中的罪魁禍首竟然是我在UICollectionView Cell的heirarchy中使用的CardView。 一旦我禁用了CardView的用戶交互,collectionView就開始響應觸摸事件。
如果它有所幫助,這只會讓我以愚蠢的方式咬我幾個小時。 仔細檢查你的自定義單元是否是UICollectionViewCell的子類,而不是,比如UICollectionReusableView😂
嘗試從視圖中刪除所有UIGestures然后測試以查看UICollectionView Cells是否能夠正常交互。
就我而言,我不得不刪除這些行:
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
self.view.addGestureRecognizer(tap)
記得在類中添加UICollectionViewDataSource,UICollectionViewDelegate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.