2017-01-22 2 views
1

ダブルタップジェスチャーまたはその他の機能をコレクションビューに追加して、選択したセルに添付されたファイルをダウンロードします。TapGesture inside collectionView

私はダブルタップジェスチャー認識機能を使用しています。コレクションビュー内をダブルタップするとポイントが印刷されます。しかし、私がダブルタップをしようとするとすぐに、組み込みのジェスチャー認識が有効になり、didSelectItemAtが実行されます。

didSelectItemAtでコードをトリガーせずにダブルタップを追加する方法はありますか? viewControllerにボタンを追加せずにこの機能を実現する別の方法のアイデアですか?

これは私がコレクションビューを持っているのViewControllerののviewDidLoadで一緒に遊んでいたジェスチャーコードです:

let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap)) 
    doubleTap.numberOfTapsRequired = 2 
    self.collectionView.addGestureRecognizer(doubleTap) 

そして、私のダブルタップ機能:注意点としては

func didDoubleTap(gesture: UITapGestureRecognizer) { 

    let point: CGPoint = gesture.location(in: self.collectionView) 

    print(point) 

    if let selectedIndexPath: IndexPath = self.collectionView.indexPathForItem(at: point) { 
     let selectedCell: UICollectionViewCell = self.collectionView.cellForItem(at: selectedIndexPath as IndexPath)! 
     print("cell \(selectedCell) was double tapped") 
    } 
} 

を、私が試してみましたこれをセル自体に追加しましたが、動作させることができませんでした。セルはカスタムUICollectionViewCellであり、viewDidLoad関数がないので、ジェスチャを作成するには、コレクションビューを保持するviewControllerからジェスチャを設定するコードを呼び出すデリゲートを作成しなければならず、エラーが発生していました。

答えて

1

ジェスチャー認識機能でdelaysTouchesBegan = trueを試すことができます。これは、didSelectにつながるタッチ処理を遅らせ、ジェスチャ認識装置からあなたの動作を実行する必要があります。

+0

ありがとう、素敵な簡単な解決策。 – Pippo

0

cellForRowAtIndexpathデータソースメソッド内のすべてのセルにタップジェスチャ認識機能を追加する必要があります。