C'est ce que tu fais:
dans votre fichier myCollectionViewController.h, ajoutez le protocole UIGestureRecognizerDelegate
@interface myCollectionViewController : UICollectionViewController<UIGestureRecognizerDelegate>
dans votre fichier myCollectionViewController.m:
- (void)viewDidLoad
{
// attach long press gesture to collectionView
UILongPressGestureRecognizer *lpgr
= [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = .5; //seconds
lpgr.delegate = self;
[self.collectionView addGestureRecognizer:lpgr];
}
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateEnded) {
return;
}
CGPoint p = [gestureRecognizer locationInView:self.collectionView];
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:p];
if (indexPath == nil){
NSLog(@"couldn't find index path");
} else {
// get the cell at indexPath (the one you long pressed)
UICollectionViewCell* cell =
[self.collectionView cellForItemAtIndexPath:indexPath];
// do stuff with the cell
}
}
Selon le commentaire dynamicDan , pour iOS7, cette ligne doit être ajoutée
lpgr.delaysTouchesBegan = YES;
pour éviter que didHighlightItemAtIndexPath ne soit déclenché en premier.