2017-02-06 1 views
0

Actuellement, j'ai 2 classes: ViewController et classe A. Mon objectif est d'ajouter du robinet à un geste de reconnaissance UIView de la classe A. Mon ViewController:Ajouter robinet geste d'un autre fichier de reconnaissance

class ViewController { 
    @IBOutlet var area: UIView! 

    func enterClassA() { 
     let classA = A(self.area) 
     //some processing 
    } 
} 

class A : UIGestureRecognizerDelegate { 
    private var currView: UIView! 

    init(newView: UIView) { 
     self.currView = newView 
     self.addTapGesture() 
    } 

    func addTapGesture() { 
     let tap = UITapGestureRecognizer(target: self.currView, action:#selector(tapDetected(_:))) 
     tap.delegate = self.currView as! UIGestureRecognizerdelegate? //*** 
     self.currView.addGestureRecognizer(tap) 
    } 

    @objc func tapDetected(_ tapGesture: UIGesturerecognizer) { 
     print ("Tap detected!") 
    } 
} 

Mais maintenant il est de donner erreur: impossible de convertir la valeur de type 'UIView' en 'UIGestureRecognizerDelegate'. J'ai essayé de modifier la ligne *** à

tap.delegate = self 

Mais il ne fonctionne toujours pas, montrant erreur: sélecteur non reconnu envoyé à l'instance. Supprimer la ligne donne la même erreur. Est-ce que je peux savoir si c'est faisable ou non (ajout de reconnaissance de gestes d'une classe différente)? Si oui, comment dois-je l'aborder?

Répondre

0

Dans cette ligne

let tap = UITapGestureRecognizer(target: self.currView, action:#selector(tapDetected(_:))) 

Vous dites que le geste de reconnaissance pour rechercher la fonction tapDetected() dans l'objet self.currView. Essayez de changer la cible:

let tap = UITapGestureRecognizer(target: self, action:#selector(tapDetected(_:))) 

Et oui, il devrait être comme ça:

tap.delegate = self 

Depuis votre classe A est conforme à UIGestureRecognizerDelegate.