2012-06-22 9 views
9

Tengo un botón que quiero hacer desaparecer si se toca algo que no sea el botón. Así que me puse el objetivo: acción: En el botón de borrar:¿El evento de toque de botón se anula mediante el Tap Gesture Recognizer?

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

seguido más tarde por la adición del reconocedor del grifo gesto a la vista que contiene:

[self.superview addGestureRecognizer:self.tapOutsideDelete]; 

Cuando hago esto, la acción de botón Delete es no ejecutado, como si el botón no fuera reconocido. El reconocedor de gestos funciona en este caso. Pero también funciona cuando toco deleteButton, lo que me lleva a pensar que el reconocedor de gestos de toque tiene prioridad sobre el botón de toque.

Si elimino el reconocedor de gestos, deleteButton funciona correctamente.

claramente no entiendo cómo manejar estos dos eventos juntos. ¿Que necesito hacer?

(deleteButton imita el botón Eliminar de una celda de vista de tabla, pero en este caso lo tengo en una vista de encabezado. Espero llamar a un método para hacer que desaparezca el botón Eliminar cuando toco en cualquier lugar de la tabla, excepto el botón en sí, de la misma manera que funciona en una celda.)

+0

Usted puede obtener un poco de extrañeza añadiendo el reconocedor gesto para self.superview en lugar de uno mismo (o self.view si es un controlador de vista). Esto lo agregaría a la vista de tabla que contiene la vista de encabezado, en lugar de a la vista de encabezado, que puede o no ser lo que usted desea. – MusiGenesis

+0

posible duplicado de [gestor de reconocimiento y acciones de botón] (http://stackoverflow.com/questions/4825199/gesture-recognizer-and-button-actions) –

Respuesta

12

Sí, el gesto del grifo obtiene la primera grieta en el grifo. Es necesario poner en práctica el método de gestureRecognizer:shouldReceiveTouch::

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
      shouldReceiveTouch:(UITouch *)touch { 

    if (touch.view == self.deleteButton) { 
     return NO; 
    } 
    return YES; 
} 
+2

Gracias. Esto funcionó perfectamente. Fue necesario investigar un poco para descubrir que este es un método delegado del protocolo UIGestureRecognizerDelegate, por lo que también se debe establecer el puntero delegado. – Jim

+0

@Jim: lo siento, iba a agregar eso. Es frustrante que tantos tutoriales de iOS, etc. en la web no contengan * toda * la información que necesita para una solución, y simplemente lo agregué. – MusiGenesis

Cuestiones relacionadas