2013-08-30 2 views
3

У меня проблема с UITapGestureRecognizer в моем представлении коллекции, и я не знаю об ошибке.UITapGestureRecognizer распознается как UILongPressGestureRecognizer

Я хочу сделать пользовательское действие, когда есть длинный пресс жест, и когда есть водопроводная жест я хочу ничего не делать, так что у меня есть эти методы:

- (void)activateSelectionMode:(UILongPressGestureRecognizer *)gr 
{ 
    if (![self.collectionView allowsSelection]) { 
     [self.collectionView setAllowsSelection:YES]; 
     NSLog(@"Seleccion activada"); 
    } 
} 

- (void)pruebaTap:(UITapGestureRecognizer *)tr 
{ 
    NSLog(@"tap"); 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    CGPoint touchPoint = [touch locationInView:self.collectionView]; 
    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:touchPoint]; 
    if (indexPath != nil && [gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
    { 
     CVCell *cell = (CVCell *)[self.collectionView cellForItemAtIndexPath:indexPath]; 

     if ([[cell checkImage] isHidden]) { 
      // TODO: Añadir la celda a la lista de celdas seleccionadas 
      [[cell checkImage] setHidden:NO]; 
      NSLog(@"Seleccionada celda %@", [[cell titleLabel] text]); 
     } else { 
      // TODO: Quitar la celda de la lista de celdas seleccionadas 
      [[cell checkImage] setHidden:YES]; 
      NSLog(@"No seleccionada celda %@", [[cell titleLabel] text]); 
     } 

     NSLog(@"Entra"); 

     return YES; 
    } 

    return NO; 
} 

Если я комментирую последнее метод, каждый метод распознается отлично, но если я не прокомментирую последний метод, жест нажатия будет распознан как длинный жест нажатия. Здесь я назначаю жест коллекционному представлению:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pruebaTap:)]; 
tap.delegate = self; 
[self.collectionView addGestureRecognizer:tap]; 

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(activateSelectionMode:)]; 
longPress.delegate = self; 
[self.collectionView addGestureRecognizer:longPress]; 

Большое спасибо.

+0

«ЕСЛИ я прокомментирую последний метод, каждый метод распознается отлично, но если я не прокомментирую последний метод» - - что вы подразумеваете под последним методом? –

+0

shouldReceiveTouch – Juanjo

ответ

0

Он определенно распознает долгожданный жест, потому что, вы добавили его последним, что вы делаете, вы добавляете 2 жесты на том же самом представлении, так что ваш жест longPress будет перекрываться на жесте UITapGestureRecognizer (это крана), поэтому каждый раз будет объявлен длинный жест.

Что вы можете сделать, вам придется добавить один за раз.

+0

У меня была такая же проблема без добавления распознавателя крана:/ – Juanjo

+0

Что именно вы хотите сказать? вы не добавили жест нажатия, и вы добавили только жест UILongpress и метод longpress (activateSelectionMode), который не вызывает ??? – NiravPatel

1

Не уверен, что вы внедрили метод делегата ниже, или нет.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer 
:(UIGestureRecognizer *)otherGestureRecognizer; 

Если вы не реализовали, то никаких проблем, потому что реализация по умолчанию возвращает NO, но если вы реализовали & вернулись ДА, то как жест будет распознан. Может быть возвращено НЕТ, решит вашу проблему.

Смежные вопросы