recognizer ios swift uigesturerecognizer

ios - GestureRecognizer no responde al toque



uipangesturerecognizer swift 4 (7)

Además de las otras respuestas, esto puede ser causado al agregar el reconocedor de gestos a múltiples vistas. Los reconocedores de gestos son solo para vistas individuales.

Referencia: https://stackoverflow.com/a/5567684/6543020

Después de la inicialización por subclase de UIImageView , tengo la siguiente línea de código:

self.userInteractionEnabled = true self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:"))

Creé la función asociada necesaria:

func handleTap(gestureRecognizer: UITapGestureRecognizer) { print("In handler") }

Al tocar en la vista en cuestión, "En el controlador nunca se imprimió en la consola". Luego eliminé la función de controlador para ver si el compilador se quejaba de la función que faltaba. No fue así.

Estoy positivamente perplejo. Realmente apreciaría cualquier luz que la gente pueda arrojar sobre esto.

Actualización : Mi clase es en realidad un UIImageView en comparación con UIView


Descubrí la respuesta después de peinar cuidadosamente mi código.

Una de las vistas principales se creó sin proporcionar un frame:

Si bien es un error suficientemente grande como para garantizar la eliminación de estas preguntas, es probable que otra persona tenga el mismo problema en el futuro ...


Encontré la solución a este problema después de mucho ensayo y error. Entonces hay dos soluciones dos esto

1. Agregue GestureRecognizer en viewDidLoad () y active userInteractionEnabled = true

2. Si usa la propiedad calculada, use lazy var lugar de let en la propiedad.

lazy var profileImageView: UIImageView = { let iv = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) iv.image = #imageLiteral(resourceName: "gameofthrones_splash") iv.contentMode = .scaleAspectFill iv.translatesAutoresizingMaskIntoConstraints = false iv.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView))) iv.isUserInteractionEnabled = true return iv }()


Estaba usando UITapGestureRecognizer que coloqué en un UILabel usando Storyboard.

Para que esto funcione, también tuve que colocar una marca de verificación en el bloque etiquetado: "Interacción del usuario habilitada" en el Inspector de atributos de UILabel en el guión gráfico.


Lo más probable es que agregue UIGestureRecognizer en el lugar incorrecto. Aquí está la muestra de trabajo con UIView del storyboard . Si crea su UIView dinámicamente, entonces debe poner esta inicialización en el constructor correcto.

class TestView: UIView { override func awakeFromNib() { self.userInteractionEnabled = true self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "handleTap:")) } func handleTap(gestureRecognizer: UITapGestureRecognizer) { println("Here") } }


Prueba esto

override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.view.userInteractionEnabled = true var tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:")) self.view.addGestureRecognizer(tapGesture) } func handleTap(sender : UIView) { println("Tap Gesture recognized") }


Este código funciona para mí con XCode 7.0.1

import UIKit class ImageView: UIImageView { init(frame: CGRect, sender: Bool, myImage: UIImage) { super.init(frame: frame) self.image = myImage initBorderStyle(sender) // enable user interaction on image. self.userInteractionEnabled = true let gesture = UITapGestureRecognizer(target: self, action: "previewImage:") addGestureRecognizer(gesture) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func previewImage(myGesture: UITapGestureRecognizer? = nil) { print("i''m clicked") } private func initBorderStyle(sender: Bool) { self.layer.masksToBounds = true self.layer.cornerRadius = 8 self.layer.borderWidth = 0.5 self.layer.borderColor = getBorderColor(sender) self.backgroundColor = getColor(sender) } func getBorderColor(sender: Bool) -> CGColor { var result: CGColor if sender { result = UIColor(red: 0.374, green: 0.78125, blue: 0.0234375, alpha: 0.5).CGColor } else { result = UIColor(red: 0.3125, green: 0.6015625, blue: 0.828125, alpha: 0.5).CGColor } return result } }