¿Cómo detectar "tocar hacia abajo" en la vista de supervisión de UIScrollView?

Tengo una UIView que contiene una UIScrollView y quiero poder capturar el evento "Touch Down" en la UIView cada vez que el usuario toque la UIScrollView.

He intentado include todos los controlleres touchesBegan / Ended / Canceled en mi UIViewController, pero ninguno de ellos se activa al tocar dentro del UIScrollView contenido en la UIView principal.

Cuál es la mejor manera de lograr esto?

En la UIView, implementar 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 userInteractionEnabled esté configurado en YES en UIView.

También puede implementar hitTest:withEvent: en su subclass UIView. Se llama a este método para determinar qué subvista debe recibir un evento táctil. Entonces, aquí puede rastrear todos los events que pasan por su vista o ocultar algunos de los events de las subvistas. En este caso, no es necesario que deshabilite la interacción del usuario para su scrollview.

Vea más detalles sobre este método en la reference de la class UIView .

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 superponiendo la vista de desplazamiento:

 self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease]; tap.numberOfTapsRequinetworking = 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 vista de supervisión de UIScrollView obtiene el evento touchesBegan.