セルのUIImageViewでUILongPressGestureRecognizerを使用してUICollectionViewCellのNSIndexPathを取得しようとしていますが、コレクションビューの最初のアイテムに対して正確に機能することがありますが、UICollectionViewをスクロールしてセルを押すと、最初のセルが取得されますUICollectionViewCell のアイテムであり、私が押したものではありません。それ以外の場合は nil を返します。これを修正するにはどうすればよいですか? これはコードです:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
...
UILongPressGestureRecognizer* longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(onLongPress:)];
longPressRecognizer.minimumPressDuration = 1.0;
[cell.imgView setUserInteractionEnabled:YES];
[cell.imgView addGestureRecognizer:longPressRecognizer];
...
}
-(void)onLongPress:(UILongPressGestureRecognizer*)gestureRecognizer
{
if(UIGestureRecognizerStateBegan == gestureRecognizer.state) {
NSLog(@"began");
NSLog(@"%2.f %.2f",[gestureRecognizer locationInView:self.view].x,[gestureRecognizer locationInView:self.view].y);
NSIndexPath *item = [self.collectionView indexPathForItemAtPoint:[gestureRecognizer locationInView:self.view]];
NSLog(@"%d - %d",item.row,item.section);
MyCell *cell = (MyCell *)[self.collectionView cellForItemAtIndexPath:item];
NSLog(@"%@",cell.myLabel.text);
}
}