2011-08-22 9 views

risposta

53

Quindi quello che essenzialmente serve è quello di ottenere la cellula dal gesto di scorrimento sul tavolo? Giusto. Non è necessario conoscere lo indexPath. Prima di definire colpo sul tableView in questo modo -

UISwipeGestureRecognizer *showExtrasSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipe:)]; 
showExtrasSwipe.direction = UISwipeGestureRecognizerDirectionRight; 
[tableView addGestureRecognizer:showExtrasSwipe]; 
[showExtrasSwipe release]; 

Dopo questo, quando il colpo reale accade è necessario mettere gestore per esso. Per questo provare questo-

-(void)cellSwipe:(UISwipeGestureRecognizer *)gesture 
{ 
    CGPoint location = [gesture locationInView:tableView]; 
    NSIndexPath *swipedIndexPath = [tableView indexPathForRowAtPoint:location]; 
    UITableViewCell *swipedCell = [tableView cellForRowAtIndexPath:swipedIndexPath]; 

    //Your own code... 
} 

Allora, cosa che abbiamo fatto è prima allegare un SwipeGestureRecognizer al UITableView (non il UITableViewCell). Dopodiché, quando si verifica lo scorrimento su UITableView, innanzitutto ottengo le coordinate di dove si è verificato il gesto nello UITableView. Successivamente, usando queste coordinate ottengo il IndexPath della riga di dove si è verificato lo swipe nello UITableView. Finalmente usando lo IndexPath ottengo il UITableViewCell. Semplicemente ..

Nota: Mi è stato chiesto fin troppo troppe volte. Quindi aggiungendo questa spiegazione del motivo per cui ho usato SwipeGestureRecognizer su UITableView e non su ogni singolo UITableViewCell.

Potrei aver allegato SwipeGestureRecognizer a ogni UITableViewCell. Non l'ho fatto poiché avrei dovuto allegare uno SwipeGestureRecognizer separato per ogni cella. Quindi, se avessi 1000 celle nel mio UITableView, avrei dovuto creare 1000 oggetti SwipeGestureRecognizer. Questo non è buono. Nel mio approccio sopra ho appena creato uno SwipeGestureRecognizer e questo è tutto.

+1

Grazie mille ... Ha funzionato. –

+2

ovviamente lo ha fatto. Questo particolare codice ha già visto milioni di colpi! –

+0

Penso che sia necessario modificare pinchedIndexPath su swipedIndexPath – DenTheMan

0

Se si sta tentando di implementare il "passaggio da eliminare" (scorrere in direzione orizzontale), non è necessario reinventare la ruota. È sufficiente decommentare il metodo commitEditingStyle:forRowAtIndexPath: nel delegato UITableViewController.

Problemi correlati