2011-10-12 20 views
27

Actualmente tengo una UITableViewCell personalizada que contiene un UIImageView y tratando de agregar un UITAPGestureRecognizer en el UIImageView sin suerte. aquí hay un fragmento del código.UITapGestureRecognizer en UIImageView dentro de UITablevlewCell no se llama

//within cellForRowAtIndexPath (where customer table cell with imageview is created and reused) 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleImageTap:)]; 
tap.cancelsTouchesInView = YES; 
tap.numberOfTapsRequired = 1; 
tap.delegate = self; 
[imageView addGestureRecognizer:tap]; 
[tap release]; 

// handle method 
- (void) handleImageTap:(UIGestureRecognizer *)gestureRecognizer { 
    RKLogDebug(@"imaged tab"); 
} 

también me he fijado userInteractionEnabled en la célula y la supervista del UIImageView pero sigue sin suerte, alguna pista?

EDITAR:

También he quito la selección de célula por cell.selectionStyle = UITableViewCellSelectionStyleNone; Podría ser un problema

+0

En primer lugar, ¿por qué no utiliza un UIButton en lugar de la vista de imagen? En segundo lugar, ¿habilitó la interacción del usuario para la vista de la imagen real? – Rog

+0

@Rog 'cus Quiero usar la función UIViewContentModeScaleAspectFit de UIImageView, ¿UIButton tiene la misma funcionalidad? – Herman

+0

También al usar UIControl en scrollview, bloquea el desplazamiento cuando comienza el toque ... – JakubKnejzlik

Respuesta

98

La interacción del usuario de UIImageView es deshabilitada de forma predeterminada. Tiene que habilitarlo explícitamente para que responda a toques.

imageView.userInteractionEnabled = YES; 
+2

Ya lo hice, pero todavía no tuve suerte – Herman

+0

funcionó para mí ... gracias !! – samfisher

+1

¿Quizás tengas una UIView encima? –

0

En mi caso que parece:

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *cellIdentifier = CELL_ROUTE_IDENTIFIER; 
    RouteTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 
     cell = [[RouteTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:cellIdentifier]; 
    } 

    if ([self.routes count] > 0) { 
     Route *route = [self.routes objectAtIndex:indexPath.row]; 

     UITapGestureRecognizer *singleTapOwner = [[UITapGestureRecognizer alloc] initWithTarget:self 
                        action:@selector(imageOwnerTapped:)]; 
     singleTapOwner.numberOfTapsRequired = 1; 
     singleTapOwner.cancelsTouchesInView = YES; 
     [cell.ownerImageView setUserInteractionEnabled:YES]; 
     [cell.ownerImageView addGestureRecognizer:singleTapOwner]; 
    } else { 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
    return cell; 
} 

y el selector:

- (void)imageOwnerTapped:(UISwipeGestureRecognizer *)gesture { 
    CGPoint location = [gesture locationInView:self.tableView]; 
    NSIndexPath *tapedIndexPath = [self.tableView indexPathForRowAtPoint:location]; 
    UITableViewCell *tapedCell = [self.tableView cellForRowAtIndexPath:tapedIndexPath]; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:tapedCell]; 
    NSUInteger index = [indexPath row]; 

    Route *route = [self.routes objectAtIndex:index]; 
} 
2

Swift 3

Esto funcionó para mí:

self.isUserInteractionEnabled = true