Estoy tratando de agregar 2 UITapGestureRecognizers
a una vista, una para un solo toque y otra para eventos de doble toque. El reconocedor de un solo toque funciona como se espera (por sí solo). Pero parece que no puedo hacer funcionar el reconocedor de doble toque.
Han tratado de experimentar con propiedades como: cancelsTouchesInView
, delaysTouchesBegan
y delaysTouchesEnded
pero aún no funciona.
Cuando toco dos veces, el reconocedor de un solo toque siempre se activará y el evento de doble toque también se enviaría a la vista super. Pero el reconocedor de doble toque personalizado no parece ser notificado en absoluto.
Las documentaciones parecen sugerir que las 3 propiedades mencionadas anteriormente podrían usarse para este propósito. Pero no estoy seguro de qué valores deben establecerse y en qué reconocedor (s), simple, doble o ambos. Espero que alguien familiarizado con esto pueda ayudar.
El siguiente es el último bloque de código actualizado.
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
Respuestas:
Nota: Si lo está utilizando
numberOfTouchesRequired
, debe ser.numberOfTouchesRequired = 1;
Para Swift
fuente
Solución Swift 3:
En la línea de código singleTap.require (toFail: doubleTap) estamos obligando al toque único a esperar y asegurarnos de que el evento de toque no sea un doble toque.
fuente
Debe utilizar el método requireGestureRecognizerToFail: Algo como esto:
[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
fuente
// ---- en primer lugar tienes que asignar el gesto de toque doble y simple ------- //
// ----------------------- número de tomas ---------------- //
// ------- agregue doble toque y gesto de un solo toque en la vista o botón -------- //
fuente
No estoy seguro de si eso es exactamente lo que estás buscando, pero hice toques simples / dobles sin reconocedores de gestos. Lo estoy usando en UITableView, así que usé ese código en el método didSelectRowAtIndexPath
Los métodos singleTap y doubleTap son nulos con NSIndexPath como parámetro:
Espero eso ayude
fuente
Solución para Swift 2:
fuente
Implementé métodos UIGestureRecognizerDelegate para detectar singleTap y doubleTap.
Solo haz esto.
Luego implemente estos métodos delegados.
fuente
Algunas vistas tienen sus propios reconocedores de doble toque integrados (
MKMapView
siendo un ejemplo). Para evitar esto, deberá implementar elUIGestureRecognizerDelegate
métodoshouldRecognizeSimultaneouslyWithGestureRecognizer
y devolverYES
:Primero implemente sus reconocedores dobles y simples:
Y luego implementar:
fuente
En referencia al comentario de @ stanley:
No intente usar gestos de toque para seleccionar las filas para trabajar
UITableView
, ya que ya tiene un manejo completo del toque ...Pero debe establecer 'Cancela los toques en la vista' en 'NO' en sus reconocedores de gestos de toque único o nunca obtendrá los eventos de toque.
fuente