2016-09-16 4 views
1

UIButtonを追加したカスタムクラスのオーバーレイがあります。ボタンをクリックすると、メソッドが呼び出されるべきである。UITapGestureRecognizerがカスタムクラス内で動作していない(ビューコントローラではない)

class Overlay { 

func show(onView view: UIView, frame: CGRect) { 
    let dismissButton = UIButton() 
     dismissButton.frame = frame 
     dismissButton.setTitle("Dismiss", for: .normal) 
     dismissButton.setTitleColor(Project.Color.failure, for: .normal) 
     dismissButton.titleLabel?.font = Project.Typography.lightFont.withSize(22) 
     view.addSubview(dismissButton) 

     dismissButton.isUserInteractionEnabled = true 

     let tap = UITapGestureRecognizer(target: self, action: #selector(dismissBtnTapped(tap:))) 
     dismissButton.addGestureRecognizer(tap) 
} 

@objc func dismissBtnTapped(tap: UITapGestureRecognizer) { 
    print("TEST") 
} 

私はそのビューとフレームを渡し、私のViewController内show(...)を呼び出します。

ただし、tapGestrueRecognizerは機能しません。何か案は?

ありがとうございます。

編集:このコードを直接私のViewControllerの中に入れてみました。その後、それは動作します。でも、私はなぜわからないんだけど、それは私のために実行可能なソリューションではないですが、残念ながら:/

編集2: 私はそれを呼び出す方法ですそれ:

let overlay = Overlay() 
overlay.show(onView: self.view, frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 150)) 
+0

ボタンに 'tapgesturerecognizer'を追加する理由あなたはそれのためのアクションメソッドを直接書くことができます! – Lion

+0

オーバーレイをView Controllerにどのように「接続」しますか? – Zico

+0

'dismissButton.addTarget(...)'を試みましたが、うまく動作しませんでした。あなたはそのオーバーレイを「つけて」いるとはどういう意味ですか? – Quantm

答えて

1

すでにボタンを追加していますが、ジェスチャーの代わりにターゲットを追加してみてください( )。オーバーレイ変数をグローバルにしてください。

class YourControllerClass: UIViewController { 
let overlay = Overlay() 
... 
func show(onView: UIView, frame: CGRect) { 
... 
dismissButton.addTarget(self, action: #selector(dismissBtnTapped(_:)), forControlEvents: .TouchUpInside) 
} 

func dismissBtnTapped(sender:UIButton){ 

} 
} 

希望します。

+0

それを試してみました。動作しませんでした:/ – Quantm

+0

あなたのビューに複数のオーバーレイを追加していますか? –

+0

いいえ、ただ一つだけ – Quantm

0

お渡ししているあなたのviewていることを確認しますユーザーインタラクションでshow(onView: UIView, frame: CGRect)メソッドのonViewが有効になっています。あなたがuibuttontapgesturerecognizerを追加する必要はありませ

+0

ええ、それは有効です – Quantm

1

、あなたは直接、その上のようなものをターゲットを追加

dismissButton.addTarget(self, action: #selector(dismissBtnTapped), forControlEvents: .TouchUpInside) 

dismissBtnTapped方法からパラメータを削除することができます!

+0

上記のコメントを参照してください – Quantm

関連する問題