2017-02-01 9 views
0

画面に触れるたびに何も起こりません。 handleDismiss()のような機能は決して発射されません。誰もが本当の問題が何であるかを知っていますか?UITapGestureRecognizerで関数を実行できませんでした

import UIKit 

class SettingLauncher : NSObject{ 

    let blackView = UIView(); 

    func showSettingMenu(){ 
     if let window = UIApplication.shared.keyWindow{ 

      blackView.backgroundColor = UIColor(white: 0, alpha: 0.5); 
      blackView.isUserInteractionEnabled = true; 
      blackView.addGestureRecognizer(UITapGestureRecognizer(target: nil, action: #selector(self.handleDismiss))); 

      window.addSubview(blackView); 
      blackView.frame = window.frame; 
      blackView.alpha = 0.1; 

      UIView.animate(withDuration: 0.5) { 
       self.blackView.alpha = 0.5; 
      } 
     } 
    } 

    func handleDismiss(){ 
     print("Touch recognised"); 
    } 
} 
+0

画面上のその場所をタップするとジェスチャ認識機能が起動されますか?あなたはイベントを飲み込むことはないと確信していますか? –

+0

なぜhandleDismiss関数が起動していないのかわかりません。上記のコードはすべて表示されており、イベントは何も食べていません。 – Bikram

+0

上記のコードでは何も起こりません。私はターゲットをblackViewに変更すると、タップしている間にエラーが発生します。しかし、私は自己またはnilに変更すると、何も画面に表示されません。 – Bikram

答えて

0

を問題ではないはず - 私はボタンから表示を開始しています以下: - 私は以下のようなグローバルインスタンスとしてsettingLauncherを宣言したとき

func handleMoreSetting(){ 
     let settingLauncher = SettingLauncher(); 
     settingLauncher.showSettingMenu(); // Call SettingLauncher class 
    } 

問題が去っていきました。

let settingLauncher = SettingLauncher(); 
func handleMoreSetting(){ 
     settingLauncher.showSettingMenu(); // Call SettingLauncher class 
    } 

問題が発生した理由は誰にも分かりますか?どちらの場合も、私は同じ機能を呼び出すが、結果は異なっている。

0

あなたはクラスが応答取り扱いとなりUITapGestureRecognizer伝える必要があります - だけでなく機能するが、クラス

変更

blackView.addGestureRecognizer(UITapGestureRecognizer(target: nil, action: #selector(self.handleDismiss))); 

ここだ

blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleDismiss))) 

への私が働いている例。私はあなたが開始されたかわからないが、それは、私は別のクラスの機能として通じ関数showSettingMenuを()と呼ばれるので、私は上記のエラーを得た

class ViewController: UIViewController 
{ 
    let blackView = UIView() 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    func handleDismiss(){ 
     print("Touch recognised"); 
    } 

    @IBAction func cmdDoOtherStuff(_ sender: Any) 
    { 
     if let window = UIApplication.shared.keyWindow{ 

      blackView.backgroundColor = UIColor(red: 1.0, green: 0, blue: 0, alpha: 0.5)//(r: 0, alpha: 0.5) 
      blackView.isUserInteractionEnabled = true 
      blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleDismiss))) 

      window.addSubview(blackView) 
      blackView.frame = window.frame 
      blackView.alpha = 0.1 
      UIView.animate(withDuration: 0.5) { 
      self.blackView.alpha = 0.5; 
      } 
     } 
    } 
} 
+0

ターゲットを自分自身に変更しても何も起こりません。 – Bikram

+0

オハイオ州 - 私はあなたが 'NSObject'のクラスからこれを呼び出すのを見ています。ビューを含むUIViewControllerにこのコードを入れたり、UIViewControllerへの参照を渡してそこのhandleDismiss関数を移動する必要があります。 – Russell

+0

結果は上記と同じです。それをUIViewControllerにも変更するものはありません。 – Bikram

関連する問題