¿Cómo detectar "toque" en supervisión de UIScrollView?
-
25-09-2019 - |
Pregunta
tengo un UIView
que contiene un UIScrollView
y quiero poder capturar el evento "toque" en el UIView
cada vez que el usuario aprovecha el UIScrollView
.
He intentado incluir todos los manejadores Touchesbegan/End/Canceled en mi UIViewController
Pero ninguno de ellos es despedido al tocar dentro del UIScrollView
contenido en el principal UIView
.
Cuál es la mejor manera de lograr esto?
Solución
En el UIView, implementa touchesbegan:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// assign a UITouch object to the current touch
UITouch *touch = [[event allTouches] anyObject];
// if the view in which the touch is found is myScrollView
// (assuming myScrollView is the UIScrollView and is a subview of the UIView)
if ([touch view] == myScrollView) {
// do stuff here
}
}
Una nota al margen: Asegúrese de que UserInteractionAnabled esté configurado en Sí en el UIView.
Otros consejos
También puede implementar hitTest:withEvent:
En su subclase UIView. Se llama a este método para determinar qué subvisión debe recibir evento táctil. Así que aquí puede rastrear todos los eventos que pasan por su vista no u ocultar algunos de los eventos de las subvisiones. En este caso, es posible que no necesite deshabilitar la interacción del usuario para su ScrollView.
Ver más detalles sobre este método en UIView
Referencia de clase.
También puede agregar un reconocimiento de gestos a su supervisión. Por ejemplo, un gesto de toque si necesita activar/desactivar cosas como botones que superponen la vista de desplazamiento:
self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease];
tap.numberOfTapsRequired = 1;
["containerView" addGestureRecognizer:tap];
Los gestos preservan la interacción de la vista de desplazamiento
Debe deshabilitar la interacción del usuario con la vista de desplazamiento como tal ...
scrollView.userInteractionEnabled = NO;
Una vez deshabilitado, la supervisión del UIScrollView obtiene el evento Touchesbegan.