iosswiftuicollectionviewuigesturerecognizeruiresponder

How to add tap gesture to UICollectionView , while maintaining cell selection?


Task

Add a single tap gesture to UICollectionView, do not get in the way of cell selection.

I want some other taps on the no-cell part of the collectionView.

Code

Using XCode8, Swift 3.

override func viewDidLoad() {
    ...
    collectionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print(indexPath)
}

func tap(sender: UITapGestureRecognizer){
    print("tapped")
}

Result

Yeah, it gets in the way now. When you tap on cell, it logs "tapped".

Analysis

Question

Couldn't find more trace. Any ideas on how cell selection is implemented or to achieve this task?


Solution

  • Whenever you want to add a gesture recognizer, but not steal the touches from the target view, you should set UIGestureRecognizer.cancelsTouchesInView for your gestureRecognizer instance to false.