2016-06-26 7 views
3

私のカスタムUIView.toでUITapGestureRecognizerを正しく動作させるのに問題があります。 CategoryViewButtonのinitでUITapGestureRecognizerを追加します:サブビュージェスチャー認識器が呼び出されていない

class CategoryViewButton: UIView { 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap)) 
    self.addGestureRecognizer(tapGesture) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func handleTap() { 
    print("Hello again") 
} 
} 

ビューコントローラに直接添加した場合に、このジェスチャー認識は問題なく動作します私は、ビューを作成しました。しかし、別のカスタムビューのサブビューとしてCategoryViewButtonを追加すると、ジェスチャ認識メソッドが呼び出されません。私のサブビュー:

class CategoryView: UIView, CategoryButtonDelegate { 

var button : CategoryViewButton? 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    button = CategoryViewButton(frame: CGRect(x: 10, y: 0, width: 40, height: 25)) 
    self.addSubview(button!) 
    self.bringSubview(toFront: button!) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
} 

View ControllerでCategoryViewを作成すると、handleTap()関数は呼び出されません。私は何が欠けていますか?

+0

サブビューとして使用すると、CategoryViewButtonが表示されますか?そうでなければ、制約の問題がないかもしれません。 – Sethmr

+0

CategoryViewButtonはサブビューとして表示されます –

+0

これは内部クラスのいずれかの内部にあるか、またはジェスチャ認識機能が子クラスで使用されても機能しません。ボタンの子クラスに別のジェスチャ認識機能を設定し、認識されているかどうかを確認します。 – Sethmr

答えて

4

興味がある人にとっては、ジェスチャ認識機能を備えたサブビューがスーパービューの枠外にあるという問題がありました。これは、ビューが描画されているにもかかわらず、ジェスチャーが検出されなかったことを意味します。

関連する問題