2016-11-23 3 views
0

私はUIViewから継承するカスタムクラスを持っています。そうUIGestureRecorgniserの代理人を親に設定する

//CustomParentView.swift 

class CustomParentView: UIView, UIGestureRecognizerDelegate { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setupGestureRecognizer() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    func setupGestureRecognizer() { 
     let tap = UITapGestureRecognizer(target: self, action: #selector(CustomParentView.viewTapped(sender:))) 
     tap.delegate = self 
     self.addGestureRecognizer(tap) 
    } 

    func viewTapped(sender: UITapGestureRecognizer) { 
     print("View tapped") 
    } 
} 

は、その後、私はCustomParentViewから継承別のクラスを持っている、と私は最終的にそれを継承し、いくつかのUIViewsを持っていますが、ジェスチャー認識部ISNのためのデリゲートとして、このクラスでは、私はそれにジェスチャー認識器を追加しますCustomParentViewとして設定されていない場合は、継承するビューとして設定されます。これは、viewTapped関数を各CustomParentViewのサブクラスに移動し、すべてのクラスでこの関数を繰り返す必要があることを意味します。

私はそれがCustomParentView

+0

まあ、すぐにあなたが子供のインスタンスを作成するように、その親クラスのすべてのメンバーは、子供のメンバーになります。 'backgroundColor'のように' UIView'メンバですが、あなたは 'UIImageView'、' UITableView'とallでそれを設定できます。これは、子の 'backgroundColor'として動作します。だからあなたは何をしたいですか? –

+0

ビューを閉じます –

+0

親クラスの親を閉じます。その子は自動的に却下されます。 –

答えて

0

滞在するためCustomParentViewこととするジェスチャー認識器のためのデリゲートを設定するのですかだから私の質問は、その後、私はCustomParentViewから継承別のクラスを持っている、と私 ます最終的にはそれを継承するUIViewがいくつかありますが、ジェスチャ認識器の 代理人がCustomParentViewとして設定されていない場合、それを継承するビューとして が設定されています。

あなたがジェスチャー認識デリゲートとして割り当てるどのクラスもかまいませんが、それだけでUIGestureRecognizerDelegateプロトコルを実装する必要があります。 CustomParentViewのサブクラスは、基本クラスが行うため、このプロトコルを実装します。

これは、viewTapped関数を各CustomParentViewのサブクラスに移動し、すべてのクラスでこの関数を繰り返す必要があることを意味します。

いいえ。それは、オブジェクト指向プログラミングと継承がどのように機能するかではありません。 CustomParentViewのすべてのサブクラスはviewTappedメソッドを持ちます。

だから私の質問は、私はCustomParentViewをするジェスチャー認識器 のデリゲートを設定し行う方法であり、それはあなたが作品を持って何CustomParentView

滞在するため。それを試しましたか?それはストーリーボードで作成されたビューで動作するように

あなたはまた、他のinitからsetupGestureRecognizerを呼び出す必要があります:

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setupGestureRecognizer() 
} 
関連する問題