2010-10-11 20 views
11

Tengo un UIButton en un UIView, que está en un UIViewController que he asignado e inited desde un archivo .xib.UIButton evento 'Touch Up Inside' no funciona. 'Touch Down' funciona bien

Al enganchar un IBAction hasta el 'Touch Down' caso de UIButton se dispara correctamente. Pero si lo conecto al evento 'Touch Up Inside' no responde.

Otros eventos tampoco funcionan. 'Touch Drag Enter', 'Touch Drag Exit', 'Touch Up Outside', etc. Solo Touch Down.

¿Alguien tiene alguna idea de por qué esto podría ser?


El botón es un simple botón de rectángulo redondeado en un controlador de vista. He cargado el controlador de vista como tal:

-(void) pushNewViewController 
{ 
    MyViewController* newViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    [self.view addSubview:newViewController.view]; 
    [newViewController release]; 
} 

He añadido este botón para botón rect redondeado a MyViewController, en IB. que crearon los siguientes: IBActions

-(IBAction) buttonTouchDown:(id)sender 
{ 
    NSLog(@"Button Touch Down Event Fired."); 
} 

-(IBAction) buttonTouchUpInside:(id)sender 
{ 
    NSLog(@"Button Touch Up Inside Event Fired."); 
} 

En el menú IB He hecho clic en el botón y arrastrar la salida Touch Down a MyViewController y seleccionados buttonTouchDown :. Guardado el IB xib.

Cuando ejecuto y pruebo el botón y obtengo el mensaje "Log Touch Event Down Fired".

Pero cuando vuelvo a IB y cambiar la acción de retocar el interior y engancharlo hasta el buttonTouchUpInside: IBAction y guardar. Pruebo nuevamente, no recibo respuesta.

Saludos, ricos

+0

¿Sigue abierta esa pregunta? Se origina en octubre, ¿encontraste una solución mientras tanto? – Axel

Respuesta

2

Mencionaste el ahorro; ¿Guardó los archivos xib y MyViewController después de realizar los cambios? A menudo, cuando algo como esto deja de funcionar para mí, me parece que no guardé ni el xib en IB ni el archivo de clase en XCode.

6

Está lanzando newViewController.

Mientras que la adición de la newViewController.view como subvista retendrá la vista, el objeto newViewController tendrá una cuenta de retención de 0.

2

¿Tiene alguna manipuladores táctil de eventos implementadas en el código de su MyViewController?

Parece que su UIButton solo recibe el evento touchesBegan y el evento se cancela por algo antes de podría recibir toquesEnded.

Algo así como UIScrollView normalmente lo hace cuando está decidiendo entre táctil que necesita ser enviado a es subvistas y un lastre que debe ser manejado por sí.

+1

Luché con el mismo problema, y ​​esta fue la solución. En mi caso, tenía un UITAPGestureRecognizer en la vista principal que parecía estar bloqueando con el manejo de TouchUp. – alalonde

0

Lol pues esto era una solución mudo, pero en el xib lo tenía vinculado a buttonTouchUp exterior, y que fue la causa del problema. Tal vez esto ayude :)

15

Lo siento por llegar tarde, pero tengo exactamente el mismo problema. En mi caso, fue un UITapGestureRecognizer asignado a la vista principal. Entonces, es una buena idea buscar reconocedores también.

+4

Excelente, esto puso en el camino correcto. Comprobé las propiedades de gestureRecognizer y encontré que su es un "cancelsTouchesInView" que por defecto está configurado en SÍ, lo cambié a NO y esto resuelve mi problema. –

+0

Gracias! Un síntoma interesante fue que si mantuve presionado el botón durante unos segundos, el evento TouchUp se disparó. Debe haber sido que TapGestureRecogniser se dio por vencido y luego dejó que el evento se desencadenara. –