2010-04-07 9 views
7

Tengo una UIView que contiene UIScrollView y quiero poder capturar el evento "Touch Down" en UIView cada vez que el usuario toca en UIScrollView.Cómo detectar "Touch Down" en la supervista de UIScrollView?

He intentado incluir todos los controladores touchesBegan/Ended/Cancelled en mi UIViewController pero ninguno de ellos se activan al tocar en el UIScrollView contenido en el UIView principal.

¿Cuál es la mejor manera de lograr esto?

Respuesta

2

En el UIView, implemento 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 userInteractionEnabled se establece en YES en el UIView.

+0

Y, por mi propia respuesta a continuación, hacer que el usuario userInteractionEnabled = NO para scrollview – wgpubs

+3

Esto anula el propósito de uiscrollview ya que tenemos que implementar la operación de desplazamiento en "hacer las cosas aquí". –

-2

es necesario deshabilitar la interacción del usuario con la vista de desplazamiento como tal ...

scrollView.userInteractionEnabled = NO; 

Una vez desactivado, supervista del UIScrollView recibe el evento touchesBegan.

+1

Esto frustra el propósito de tener una vista de desplazamiento en primer lugar. – Zorayr

1

También puede implementar hitTest:withEvent: en su subclase UIView. Se llama a este método para determinar qué subvista debería recibir evento táctil. De modo que aquí puede rastrear todos los eventos que pasan a través de su vista, u ocultar algunos de los eventos de las subvistas. En este caso, es posible que no necesite deshabilitar la interacción del usuario para su vista de desplazamiento.

Ver más detalles sobre este método en UIView referencia de clase.

1

También puede agregar un reconocedor de gestos a su supervista. Por ejemplo, un gesto de pulsar si necesita activar/desactivar cosas como botones superpuestos la vista de desplazamiento:

self.tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)] autorelease]; 
tap.numberOfTapsRequired = 1; 

["containerView" addGestureRecognizer:tap]; 

gestos y deben preservar la vista de desplazamiento interacción

+0

tapgesturerecognizer detecta solo TAPS (touchdown + touchup). Entonces ahora es lo que queremos para la detección de eventos de touchdown. –

Cuestiones relacionadas