2012-04-17 8 views
19

ho sottoclasse UITableViewCell e in quella classe applico una vaschetta gesto riconoscitore:UIPanGestureRecognizer su UITableViewCell le sostituzioni di UITableView vista di scorrimento gesto riconoscitore

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

ho quindi implementare il protocollo delegato che dovrebbe consentire gesti simultanee nel visualizzazione della tabella:

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

Poi ho posto un log all'interno del metodo handlePanning solo per vedere quando è rilevato:

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

Il mio problema è che non sono in grado di scorrere verticalmente l'elenco di celle nella vista tabella e che handlePanning viene chiamato indipendentemente dalla direzione in cui viene eseguita la panoramica.

Quello che voglio è che handlePanning venga chiamato solo quando è presente solo panoramica orizzontale e non verticale. Gradirei qualche consiglio.

risposta

16

Hai provato a impostare pannings proprietà delegato?

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

È inoltre necessario conformare tale classe a UIGestureRecognizerDelegate.

2

Aggiungere il riconoscitore gesto On Tableview. Da ciò, è possibile ottenere l'oggetto cella. Da lì puoi gestire la funzionalità della cella. Per ogni gesto, ci sarà un inizio, un cambiamento, uno stato finale. Quindi, memorizza la posizione iniziale.

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

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

Utilizzando questo punto, è possibile ottenere l'IndexPath

NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint]; 

Da questo indexpath, è possibile accedere alla cella.

  UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath]; 

Utilizzando questo oggetto Cell, è possibile gestirlo.

+1

"indexPathForRowAtPoint" - grazie, esattamente ho cercato –

-1

Hai provato a impostare la proprietà bounces su NO?

+1

WOW! Che cosa?! ^. ^ –