tapgesture recognizer ios objective-c uiscrollview uitapgesturerecognizer

ios - recognizer - ScrollView reconocedor de gestos comiendo todos los eventos táctiles



tapgesture recognizer swift (8)

Tengo un UIScrollView al que agregué un único reconocedor de gestos de toque para mostrar u ocultar la superposición de UI usando:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; [scrollView addGestureRecognizer:singleTap];

y:

- (void)handleTap:(UITapGestureRecognizer *)sender { // report click to UI changer }

Agregué una vista de tabla fácil a la parte inferior de UIScrollView . Todo funciona bien (desplazándose tanto horizontal como verticalmente), pero el problema es que los toques son reconocidos solo por el reconocedor de gestos (arriba), pero no por la vista de tabla fácil. Si elimino la línea que registra el oyente de gestos, todo funciona bien, la vista de tabla se da cuenta de los toques en sí misma.

Es como si la función del reconocedor de gestos "come" los eventos tap en la vista de tabla y no los propaga hacia abajo.

Cualquier ayuda es apreciada


Creo que la razón es que User Interaction Enabled está configurado en false para UIImageView. Debes configurarlo en verdadero para habilitar tocarlo


Esto debería solucionar tu problema.
Detecta evento táctil en UIScrollView AND en los componentes de UIView [que se coloca dentro de UIScrollView]
La idea es decirle al reconocedor de gestos que no se trague los eventos táctiles. Para hacer esto, debe establecer la propiedad cancelsTouchesInView de cancelsTouchesInView en NO , que es YES de forma predeterminada.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; singleTap.cancelsTouchesInView = NO; [scrollView addGestureRecognizer:singleTap];


Esto funcionó para mí en Swift 3 / Xcode 8

self.scrollView.touchesShouldCancel(in: ** the view you want the touches in **) self.scrollView.canCancelContentTouches = false

¡Buena suerte!


Gracias @zambrey

Versión Swift 2.2+:

scrollView.delegate = self let allowMultipleTouches = UITapGestureRecognizer(target: self, action: #selector(genderPressed)) allowMultipleTouches.numberOfTapsRequired = 1 allowMultipleTouches.cancelsTouchesInView = false scrollView.addGestureRecognizer(allowMultipleTouches)

Si su vista de desplazamiento está en el guión gráfico, no se olvide de fijar el Outlet en el controlador de vista. En este ejemplo, scrollView es el Outlet de UIScrollView .


Puede capturar cualquier tipo de gestos en UIscrollView. Asegúrese de que también maneja algunas de las propiedades predeterminadas, así como establecer la propiedad cancelsTouchesInView en false, es verdadera de manera predeterminada. También proporcione algunos nodos de etiqueta a sus vistas secundarias para distinguirlos en selectores. y también permiten que su interacción del Usuario sea verdadera.

let tap = UITapGestureRecognizer (target: self, action:

selector (didTapByUser (_ :)))


Puede establecer qué objetos se incluirán / excluirán para los toques.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch { if (touch.view == [self view]) { return YES; } return NO; }


TapGestures funcionó para mí. El deslizamiento por otro lado, tuve que deshabilitar el desplazamiento y funcionó.

swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:))) swipeLeftGesture.direction = .left scrollView.addGestureRecognizer(swipeLeftGesture) swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:))) scrollView.addGestureRecognizer(swipeRightGesture) scrollView.isScrollEnabled = false


Swift 3.0

let singleTap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))) singleTap.cancelsTouchesInView = false singleTap.numberOfTapsRequired = 1 scrollView.addGestureRecognizer(singleTap)

Y el método del selector sea como.

func handleTap(_ recognizer: UITapGestureRecognizer) { // Perform operation }