2017-01-27 7 views
0

私は、自分のコレクションビューのダブルタップジェスチャーを作成しました。コレクションビューのセルをダブルタップすると、セルへのユーザーの操作が無効になります。これにより、プロセスが実行されている間にそのセルをタップすることができなくなります。しかし、私はまだプロセスを再び実行するセルをダブルタップすることができます。私はまだコレクションの他のセルのためにダブルタップを使用したい、私はちょうどプロセスを実行しているセルのためにそれを無効にしたい。プロセスが終了すると、ユーザーのやりとりが有効になり、うまくいけばダブルタップもできます。isUserInteractionEnabled = falseは、ダブルタップジェスチャーを許可します。

だから、これは私がコレクションビューを保持するビューコントローラののviewDidLoadで、ダブルタップを定義する方法である:

// add gesture recogniser 
    let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap)) 
     doubleTap.numberOfTapsRequired = 2 
     doubleTap.delaysTouchesBegan = true 
    self.collectionView.addGestureRecognizer(doubleTap) 

、プロセスの状態に応じて必要なときに私はいつものようuserInteraction切り替えています。

cell.isUserInteractionEnabled = false 
cell.isUserInteractionEnabled = true 

私がコレクションビューのダブルタップジェスチャーを無効にしているかのように、これをどう接しているのかわかりません。他のセルをダブルタップできません。そして、ダブルタップは、コレクションビューではなくセルでのみ利用できるように、設定する方法もわかりません。

答えて

1

collectionViewのサブビューでisUserInteractionEnabledを無効にすると、collectionView(スーパービュー)にイベントが引き継がれます。したがって、isUserInteractionEnabledはすべてのサブビューでタッチイベントを無効にしますが、スーパービューでは無効にします。この場合はcollectionViewです。

続行するいくつかのオプションがあります:

  1. は、カスタムUICollectionViewCellを作成し、内部的にダブルタップを処理して、ダブルタップイベントを委任するUITapGestureRecognizerを追加します。
  2. didDoubleTapメソッド内で、ダブルタップしたセルが有効か無効かを確認します。これはindexPathForItemAtPoint:を使用して行い、次にcellForItemAtIndexPath:を使用して行うことができます。
+0

ありがとう、私は簡単なオプションをまっすぐに行って、ifステートメントを使用しました。これは、最初のダブルタップが行われたときに表示されていたセルのタップジェスチャを無効にしているようです。デリゲートメソッドを見ていない。 – Pippo

+0

実際には動作しますが、私はちょうど私の条件文句を持っていました。 – Pippo

+0

素晴らしい!それを聞いてうれしい。 –

0

ジェスチャ認識ツールでisEnabledをfalseに設定できます。

UIGestureRecognizerDelegateを実装し、gestureRecognizerShouldBeginからfalseを返すことができます。

関連する問題