Me gustaría manejar una pulsación larga en UITableViewCell
para imprimir un "menú de acceso rápido". ¿Alguien ya hizo esto?
Particularmente el gesto reconoce UITableView
?
Me gustaría manejar una pulsación larga en UITableViewCell
para imprimir un "menú de acceso rápido". ¿Alguien ya hizo esto?
Particularmente el gesto reconoce UITableView
?
Primero agregue el reconocedor de gestos de pulsación larga a la vista de tabla:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.myTableView addGestureRecognizer:lpgr];
[lpgr release];
Luego, en el controlador de gestos:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
CGPoint p = [gestureRecognizer locationInView:self.myTableView];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
if (indexPath == nil) {
NSLog(@"long press on table view but not on a row");
} else if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
NSLog(@"long press on table view at row %ld", indexPath.row);
} else {
NSLog(@"gestureRecognizer.state = %ld", gestureRecognizer.state);
}
}
Debe tener cuidado con esto para que no interfiera con el toque normal de la celda del usuario y también tenga en cuenta que handleLongPress
puede dispararse varias veces (esto se debe a los cambios de estado del reconocedor de gestos).
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) ...
.UITableView
, no alUITableViewCell
...)He usado la respuesta de Anna-Karenina, y funciona casi genial con un error muy grave.
Si está utilizando secciones, presionar prolongadamente el título de la sección le dará un resultado incorrecto al presionar la primera fila de esa sección, agregué una versión fija a continuación (que incluye el filtrado de llamadas ficticias basadas en el estado del gesto, por Sugerencia de Anna-Karenina).
fuente
Respuesta en Swift 5 (Continuación de la respuesta de Ricky en Swift)
fuente
Aquí hay instrucciones aclaradas que combinan la respuesta de Dawn Song y la respuesta de Marmor.
Arrastre un largo reconocimiento de gestos y suéltelo en la celda de la tabla. Saltará al final de la lista a la izquierda.
Luego conecte el reconocedor de gestos de la misma manera que conectaría un botón.
Agregue el código de Marmor en el controlador de acción
}
fuente
Parece ser más eficiente agregar el reconocedor directamente a la celda como se muestra aquí:
Toque y sostenga para las celdas TableView, entonces y ahora
(desplácese al ejemplo en la parte inferior)
fuente
Respuesta en Swift:
Agregue delegado
UIGestureRecognizerDelegate
a su UITableViewController.Dentro de UITableViewController:
Y la función:
fuente
Reuní una pequeña categoría en UITableView basada en la excelente respuesta de Anna Karenina.
De esta manera, tendrá un método de delegado conveniente al que está acostumbrado cuando se trata de vistas de tabla regulares. Echale un vistazo:
Si desea usar esto en un UITableViewController, probablemente necesite subclasificar y cumplir con el nuevo protocolo.
Funciona muy bien para mí, ¡espero que ayude a otros!
fuente
Respuesta rápida 3, utilizando la sintaxis moderna, incorporando otras respuestas y eliminando el código innecesario.
fuente
Simplemente agregue UILongPressGestureRecognizer a la celda prototipo dada en el guión gráfico, luego arrastre el gesto al archivo .m de viewController para crear un método de acción. Lo hice como dije.
fuente
Use la propiedad de marca de tiempo de UITouch en toques Comenzó para iniciar un temporizador o detenerlo cuando toques Ended fue despedido
fuente