2012-04-17 12 views
19

He subclases UITableViewCell y en esa clase I aplicar una cacerola reconocedor gesto:UIPanGestureRecognizer en UITableViewCell anula vista de desplazamiento gesto reconocedor de UITableView

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)]; 
panning.minimumNumberOfTouches = 1; 
panning.maximumNumberOfTouches = 1; 
[self.contentView addGestureRecognizer:panning]; 
[panning release]; 

entonces aplicar el Protocolo de delegado que se supone para permitir gestos simultáneos en el vista de tabla:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

Entonces pongo un registro dentro del método handlePanning sólo para ver cuando lo detecta:

- (void)handlePanning:(UIPanGestureRecognizer *)sender { 
    NSLog(@"PAN"); 
} 

Mi problema es que no puedo desplazarme verticalmente a través de la lista de celdas en la tabla y llamar a handlePanning, sin importar en qué dirección vaya.

Lo que deseo es que handlePanning solo se invoque cuando solo hay panoramización horizontal y no vertical. Agradecería alguna guía.

Respuesta

16

¿Has probado la propiedad de delegado pannings?

panning.delegate = /* class name with the delegate method in it */; 

También deberá ajustar esa clase a UIGestureRecognizerDelegate.

2

Añadir el reconocedor gesto En tableview. A partir de eso, puedes obtener el objeto de celda. Desde allí puede manejar la funcionalidad de la célula. Para cada gesto, habrá un estado final de comienzo, cambio. Entonces, almacena la posición de inicio.

CGPoint beginLocation = [gesture locationInView:tblView]; // touch begin state. 

    CGPoint endLocation = [gesture locationInView:tblView]; // touch end state. 

El uso de este punto, se puede obtener el IndexPath

NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint]; 

De esta indexpath, puede acceder a la celda.

  UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath]; 

Usando este objeto Cell, puede manejarlo.

+1

"indexPathForRowAtPoint" - gracias, exactamente busqué –

-1

¿Ha intentado establecer la propiedad de los rebotes en NO?

+1

¡GUAU! ¡¿Qué?! ^. ^ –

Cuestiones relacionadas