Desidero ottenere un singolo tocco e toccare due volte su un UITableViewCell
. Ho creato un customDataSource per lo UITableview
.Doppio tocco su UITableViewCell
Come posso ottenere questo risultato?
Desidero ottenere un singolo tocco e toccare due volte su un UITableViewCell
. Ho creato un customDataSource per lo UITableview
.Doppio tocco su UITableViewCell
Come posso ottenere questo risultato?
Il modo corretto per farlo è aggiungere l'UITapGestureRecognizer sul tableView:
UITapGestureRecognizer* doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
doubleTap.numberOfTapsRequired = 2;
doubleTap.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:doubleTap];
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
[singleTap requireGestureRecognizerToFail:doubleTap];
[self.tableView addGestureRecognizer:singleTap];
Poi nei tuoi metodi di callback a trovare la cella con qualcosa di simile:
-(void)singleTap:(UITapGestureRecognizer*)tap
{
if (UIGestureRecognizerStateEnded == tap.state)
{
CGPoint p = [tap locationInView:tap.view];
NSIndexPath* indexPath = [_tableView indexPathForRowAtPoint:p];
UITableViewCell* cell = [_tableView cellForRowAtIndexPath:indexPath];
// Do your stuff
}
}
ho raggiunto questo aggiungendo quanto segue al tuo riconoscitore di gesti, anche se trovo che c'è un leggero ritardo durante il tocco singolo.
[tapRecognizer setDelaysTouchesBegan:YES];
[tapRecognizer setCancelsTouchesInView:YES];
hai dimenticato [rilascio doubleTap];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
doubleTap.numberOfTapsRequired = 2;
doubleTap.numberOfTouchesRequired = 1;
[cell addGestureRecognizer:doubleTap];
[doubleTap release];
È necessario disporre di questa linea per separare tra singolo e doppio tocco. [singleTap requireGestureRecognizerToFail: doubleTap]; Ecco il codice di esempio.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// After cell initialized code
//...
//...
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
doubleTap.numberOfTapsRequired = 2;
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSingleTap:)];
singleTap.numberOfTapsRequired = 1;
[singleTap requireGestureRecognizerToFail:doDoubleTap];
[cell addGestureRecognizer:singleTap];
[cell addGestureRecognizer:doubleTap];
return cell;
}
-(void)doubleTap:(UITapGestureRecognizer*)tap
{
NSLog(@"Double Taps");
CGPoint point = [tap locationInView:self.tableView];
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint: point];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
// do your stuff.
// ...
}
-(void)singleTap:(UITapGestureRecognizer*)tap
{
NSLog(@"Single Tap");
CGPoint point = [tap locationInView:self.tableView];
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:point];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
// Do you stuff with index path or cell here.
// ...
}
Questo è sbagliato! L'aggiunta di 2 riconoscitori alla vista tabella in viewDidLoad è sufficiente. stai creando 2 riconoscitori tableview.count! Se hai molte celle, prendi la memoria e la reattività dell'interfaccia utente per niente ... – altagir
Ciao, ho provato questo metodo, ma ogni volta che faccio doppio Tapp su una cella, è sempre andare in metodo del singolo rubinetto. Non passa mai alla funzione di doppio tocco. Ho scritto esattamente lo stesso codice che hai fornito. per favore aiuto. –
Per far funzionare tutto questo è necessario disabilitare l'interazione dell'utente sulla cella. Questo impedirà alla cellula di mangiare il singolo tap prima che i riconoscitori dei gesti del tavolo abbiano la possibilità di fare il loro lavoro. – rickerbh
Se si disattiva l'interazione dell'utente, come si scorre? –