Захватите конкретную ячейку просмотра коллекции из жеста касания

У меня есть UICollectionView, отображающий миниатюры изображений. Каждое представление изображения в сетке имеет жест касания. Мой вопрос в том, как я могу получить именно ту ячейку, которая была использована? Например. «Простучали по индексу № 43».

Дополнительные комментарии

  • Тап-жест создавался программно, раскадровка не использовалась.
  • В этом проекте у меня включены ARC и Story Board.

Вот самое близкое, что я пришел:

UICollectionViewController

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                 cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];

    CollectionViewCell *Cell = [collectionView
        dequeueReusableCellWithReuseIdentifier:@"Cell"
                                  forIndexPath:indexPath];
    // Enable tap gesture on each ImageView
    [Cell.ImageView setUserInteractionEnabled:YES];
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture)];
    [tapGesture setNumberOfTouchesRequired:1];
    [tapGesture setNumberOfTapsRequired:1];
    [tapGesture setDelegate:self];
    [Cell.ImageView addGestureRecognizer:tapGesture];

    Cell.ImageView.tag = row; // This tags correctly
}


- (void)tapShowImage // Also, for some reason, 
                     // - (void)handleTapGesture:(UITapGestureRecognizer *)sender
                     // doesn't work. I get an invalid selector error.
{
    NSLog(@"%i", Cell.ImageView.tag);
    // Doesn't work because I can't call Cell.ImageView.tag here.
    // Might be because I"m using SDWebImage to load the image
    // into the ImageView above but not sure.
}

person yhl    schedule 29.12.2012    source источник
comment
Может быть поздно, и вы, возможно, уже поняли это. Но при инициализации UITapGestureRecognizer селектор должен быть handleTapGesture:, а не только handleTapGesture. Обратите внимание на использование :. Это нужно для того, чтобы показать, что у вас есть аргумент в объявлении метода, то есть sender.   -  person esh    schedule 07.08.2013


Ответы (1)


Вам не нужно добавлять распознаватель касаний в каждую из ваших ячеек. Вы можете получить indexPath выбранной ячейки в методе collectionView:didSelectItemAtIndexPath:.

person rdelmar    schedule 29.12.2012
comment
Но что, если он хочет получить другие типы жестов, такие как долгое нажатие, двойное нажатие и так далее?? - person gdm; 31.07.2013
comment
@giuseppe, вопрос был не в этом. Если бы он хотел это сделать, ему пришлось бы добавить к клеткам один из этих типов распознавателей. - person rdelmar; 31.07.2013