2017-02-06 7 views
0

は現在、私は2つのクラスを持っている:のViewControllerとクラスA.私の目標は、クラスAからのUIViewに私のViewControllerタップジェスチャー認識を追加することです:別のファイルからタップジェスチャー認識を追加

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!") 
    } 
} 

をしかし、今、それは与えていますエラー:タイプ 'UIView'の値を「UIGestureRecognizerDelegate」にキャストできませんでした。私は行***を修正しようとしました

tap.delegate = self 

しかし、それはまだ動作していない、エラーを表示しています:認識できないセレクターがインスタンスに送信されました。行を削除すると同じエラーが発生します。これが実行可能であるかどうかを知ることができますか(別のクラスのジェスチャ認識プログラムを追加する)?もしそうなら、私はそれにどのように接近すべきですか?

答えて

0
このラインで

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

あなたはself.currViewオブジェクトにtapDetected()機能を検索するためのジェスチャー認識を言います。あなたAクラスがUIGestureRecognizerDelegateに準拠しているので

tap.delegate = self 

:ターゲットを変更しよう:

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

そして、はい、それはそのようにする必要があります。

関連する問題