2012-05-23 31 views
18

puedo estar perdiendo algo, pero ...TouchUpInside en UIView con niños

Tengo una UIView con unos pocos niños (un par de UILabel 's y UIImageView). Necesito detectar un evento cuando el usuario hace clic (toques) en cualquier lugar dentro del elemento principal UIView - parte visible de UIView o cualquiera de sus elementos secundarios).

¿Cuál es la mejor manera de hacerlo?

+0

¿Está usando Xcode 4? – Sirens

Respuesta

44

Puede cambiar la clase de UIView en el Inspector de identidad ... hacerla UIControl y luego puede agregar un evento para UITouchUpInside para su visualización - para ver los toques en él.

¡Buena suerte!

EDIT: he aquí una guía paso a paso, con capturas de pantalla:

La vista ... Original view - of type UIView

... por supuesto, no hay eventos. UIView has no events you can use

Volver atrás y cambiar UIView con uicontrol y ... Change UIView to UIControl

Ta-daa! ¡Eventos! UIControl allows you to use events

gancho un método para el evento UITouchUpInside Add event for UITouchUpInside

Ésta es la forma en que debe ser similar en el archivo de interfaz The interface of the method

Ésta es la forma en que debe ser similar en el archivo de aplicación (que puede , por supuesto, reemplace el registro con cualquier cosa que desee) The implementation of the method

+0

¿Alguien puede proporcionar una muestra de código para esto? – WebOrCode

+1

@WebOrCode: edité mi respuesta y agregué capturas de pantalla, espero que ayude. – DarkByte

1

tiene que dar un poco más detalles porque hay múltiples opciones.

Si desea el toque normal, puede ver uno de los eventos táctiles estándar y ver qué subvista obtuvo el evento. Algo como esto:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    if(touch.view != self.mySubViewOfInterest) 
    { 
     // perform my actions 
    } 
} 

Si necesita el reconocimiento de gestos complejos, puede utilizar uno de los UIGestureRecognizer y asignarlo a los subvistas o vista principal.

De todos modos, debe tener en cuenta que todas las subvistas (las que desea que capturen el evento) deben tener activada la interacción del usuario; de lo contrario, su vista principal capturará también los eventos de las subvistas y terminará depurando y depuración sin comprender lo que está sucediendo.

6

Puede simular este comportamiento al tener un reconocedor de gestos para su vista principal y asegurarse de que sus hijos no tengan sus propios reconocedores de gestos. Para hacer esto, agregue un reconocedor de gestos a su elemento primario UIView que esté atento a los toques. Donde parentView es la vista que contiene para su hijo Los puntos de vista (UILabels/UIImageView) y handleTap es un método implementado por parentView, hacer algo como:

UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)]; 
[parentView addGestureRecognizer:tapParent]; 
[tapParent release]; 

medida que su hijo puntos de vista no tienen sus propias reconocedores gesto que no lo harán ' come el gesto y la vista principal responderá siempre que toque dentro de sus límites.

0

Esto funciona para mí

Swift 3

let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick)) 
withSender: self) 
customView.addGestureRecognizer(gesture) 


func customViewClick() { 
    print("custom view clicked!") 
    }