UITapGestureRecognizer no funciona en UIImageView

Tenía el siguiente código:

UITapGestureRecognizer *showStoryTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNewsStory:)]; [showStoryTapRecognizer setDelegate:self]; [self.storyImageView_ addGestureRecognizer:showStoryTapRecognizer]; [showStoryTapRecognizer release]; 

Sin embargo, esto no activa el showNewsStory, ¿por qué es esto? He habilitado userInteraction en la vista de la image.

 UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)]; [oneTouch setNumberOfTouchesRequinetworking:1]; [imageView addGestureRecognizer:oneTouch]; imageView.userInteractionEnabled = YES; 

Debe habilitar la interacción del usuario para el object UIImageView :

 [self.storyImageView_ setUserInteractionEnabled:YES]; 

EDITAR:

Intente eliminar el

 [showStoryTapRecognizer setDelegate:self]; 

No creo que UITapGestureRecognizer tenga sus methods delegates por lo que yo sé.

UIImageView es la única subclass de UIView dentro de UIKit que tiene deshabilitada la interacción del usuario de manera pnetworkingeterminada.

Tal vez … action:@selector(showNewsStory) lugar de action:@selector(showNewsStory:) . Compruébelo por favor . ¿Hay algún otro UITapGestureRecognizer en este controller? Prueba esto:

 otherTapRecognizer.cancelsTouchesInView = NO; 

objective-c ios 10

 UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)]; [oneTouch setNumberOfTouchesRequinetworking:1]; [imageView addGestureRecognizer:oneTouch]; imageView.userInteractionEnabled = YES; 

// swift 3.0

  let oneTouch = UITapGestureRecognizer(target: self, action: #selector(self.OneTouchHandeler(_:))) imageView.addGestureRecognizer(oneTouch) imageView.isUserInteractionEnabled = true 

Si ya ha configurado imageView.userInteractionEnabled = YES; pero la acción aún no se dispara. Quizás sea porque para una de superviews de imageView userInteractionEnabled es NO;

También noté que en swift3, si está agregando un reconocimiento de gestos que también busca el objective y el objective suele ser self , entonces tiene que hacer que la UIView a la que está agregando el reconocimiento de gestos sea una lazy var . De lo contrario, el reconocimiento de gestos no funcionará. Creo que este es un error en swift3. Idealmente, si está accediendo a uno mismo en una variable antes de que la class se inicialice por completo, debería arrojar un error. El código a continuación no detectará el reconocimiento de gestos.

 let messageImageView: CachedImageView = { let iv = CachedImageView() iv.translatesAutoresizingMaskIntoConstraints = false iv.layer.cornerRadius = 16 iv.layer.masksToBounds = true iv.contentMode = .scaleAspectFill iv.isUserInteractionEnabled = true let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap)) zoomTap.numberOfTapsRequinetworking = 1 iv.addGestureRecognizer(zoomTap) return iv }() 

Para solucionarlo, tienes que usar lazy var

 lazy var messageImageView: CachedImageView = { let iv = CachedImageView() iv.translatesAutoresizingMaskIntoConstraints = false iv.layer.cornerRadius = 16 iv.layer.masksToBounds = true iv.contentMode = .scaleAspectFill iv.isUserInteractionEnabled = true let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap)) zoomTap.numberOfTapsRequinetworking = 1 iv.addGestureRecognizer(zoomTap) return iv }()