objective c - Selector de UITapGestureRecognizer, el remitente es el gesto, no el objeto ui
objective-c ios (4)
Tengo una serie de imágenes que identifico con su etiqueta. He agregado un solo gesto de toque a las imágenes.
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
[tableGridImage addGestureRecognizer:singleTap];
tableGridImage.userInteractionEnabled = YES;
[singleTap release];
Esto logra llamar al seleccionador de Seleccionar imagen, pero pasa el gesto como el remitente. Necesito la vista de imagen como remitente para poder obtener la etiqueta.
¿Alguna idea sobre cómo puedo obtener la imagen y su etiqueta?
Descubrí cómo conseguir la etiqueta, que fue la parte más importante de la pregunta para mí. Como el gesto es el remitente, me di cuenta de que la vista a la que está adjunto se envía junto con él:
[(UIGestureRecognizer *)sender view].tag
Sigo teniendo curiosidad si alguien me puede decir cómo enviar un argumento a través de un selector UITapGestureRecognizer.
Desde @ dysan819 respuesta, logro obtener objeto sin etiqueta. En mi caso es UILabel
.
- (void)labelTap:(id)sender {
NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]);
if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) {
UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view];
NSLog(@"tap: %@", lb.text);
}
}
El único argumento que puede enviar a través del selector UITapGestureRecognizer es el UITapGestureRecognizer como sigue:
Asegúrese de poner " : " después del nombre del selector como lo hizo anteriormente:
UITapGestureRecognizer *singleTap =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
A continuación, agregue un parámetro a selectImage para que pueda recuperar la vista de la siguiente manera:
-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{
//Get the View
UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
}
Si necesita una funcionalidad distinta para el manejador, puede ver el proyecto BlocksKit y this archivo en particular. El proyecto es un proyecto CocoaPods para que pueda instalarlo fácilmente en su cadena de herramientas.
Un ejemplo del primer archivo de código referenciado:
UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
NSLog(@"Single tap.");
} delay:0.18];
[self addGestureRecognizer:singleTap];
Esto podría permitirle configurar fácilmente un reconocedor de gestos para cada imagen.