iosswiftuigesturerecognizeruicollectionviewcell

How do I use UILongPressGestureRecognizer with a UICollectionViewCell in Swift?


I would like to figure out how to println the indexPath of a UICollectionViewCell when I long press on a cell.

How can I do that in Swift?

I have looked all over for an example of how to do this; can't find one in Swift.


Solution

  • First you your view controller need to be UIGestureRecognizerDelegate. Then add a UILongPressGestureRecognizer to your collectionView in your viewcontroller's viewDidLoad() method

    class ViewController: UIViewController, UIGestureRecognizerDelegate {
    
         override func viewDidLoad() {
             super.viewDidLoad()
    
            let lpgr = UILongPressGestureRecognizer(target: self, action: "handleLongPress:")
             lpgr.minimumPressDuration = 0.5
             lpgr.delaysTouchesBegan = true
             lpgr.delegate = self
             self.collectionView.addGestureRecognizer(lpgr)
        }
    

    The method to handle long press:

    func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
            if gestureReconizer.state != UIGestureRecognizerState.Ended {
                return
            }
    
            let p = gestureReconizer.locationInView(self.collectionView)
            let indexPath = self.collectionView.indexPathForItemAtPoint(p)
    
            if let index = indexPath {
                var cell = self.collectionView.cellForItemAtIndexPath(index)
                // do stuff with your cell, for example print the indexPath
                 println(index.row)
            } else {
                println("Could not find index path")
            }
        }
    

    This code is based on the Objective-C version of this answer.