Obtención incorrecta de la label de UIB en el reconocimiento de gestos de pulsación prolongada

Soy consciente de que ya se han formulado muchas preguntas similares, pero las he intentado todas y, al no haber podido resolver mi problema, estoy publicando mi pregunta. Primero las preguntas que probé son:

1) ¿Cómo get button.tag a través de longPressGestureRecognizer?

2) UIButton Long Press Event

En mi aplicación tengo 12 UIButtons en mi xib. Con la pulsación larga de UIButton , tengo este método llamado. Usar la propiedad gesture.view.tag siempre me da la misma label (es decir) cada vez que hago clic en diferentes UIButtons .

 - (IBAction)longPress:(id)sender { UILongPressGestureRecognizer* gesture=(UILongPressGestureRecognizer*)sender; NSLog(@"Tag---> %d",gesture.view.tag); } 

Mi xib se ve algo así:

introduzca la descripción de la imagen aquí

Actualización 1:

Antes de que alguien se confunda con xib, debo decir que los UIButtons se establecen en Tipo personalizado para que no sean visibles en UIImageView .

Parece que un UIGestureRecognizer puede rastrear más de una vista, pero no informa que está rastreando más de una vista. Por lo tanto, cuando comtesting la propiedad de view de un UIGestureRecognizer , se establece en la última vista a la que se agregó el reconocedor.

De los documentos :

Un gestor reconoce los toques probados a una vista específica y todas las subvenciones de esa vista. Por lo tanto, debe estar asociado con esa vista. Para hacer esa asociación, debe llamar al método UIView addGestureRecognizer :. Un reconocedor de gestos no participa en la cadena de respuesta de la vista.

La solución en este escenario es tener un reconocimiento de gestos para cada vista que necesite reconocer, y tenerlos vinculados al mismo selector de delegado.

Nota: esta pregunta (y mi respuesta) se originó en la sala de chat de NSChat, el 20 de marzo de 2013. Se decidió publicar aquí para reference futura.