2017-02-26 7 views
0

での焼成ではない私は、カスタムUIViewControllerに次のコードを持っていない:がUITapGestureRecognizerスウィフト3

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

func dismissTap() { 

    print("Tap!") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 

NO "をタップ!"ラインが印刷されているため、ジェスチャー認識機能は起動していません。何がうまくいかないでしょうか?

ユーザー対話が有効になるのは、このコントローラーのすべてのビューのtrueです。

このビューコントローラーは、UINavigationController内に組み込まれています(任意のヘルプの場合)。

+0

これは正しい構文ではなく、 'UITapGestureRecogniser'がないので、あなたのコードがエラーを投げていないことも知りません。' UITapGestureRecognizer'( 's'の代わりに' z')だけです。 –

+0

申し訳ありません、それらはすべてaz – Legatro

+0

で、それはより良いです。スペルは本当に重要です。興味深い、大丈夫。 –

答えて

1

ビューを読み込んだ後にのみ自己を割り当てる必要があります。

var tapDismissTextField: UITapGestureRecognizer! 

して、viewDidLoadメソッドで:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    view.addGestureRecognizer(tapDismissTextField) 
} 
1

移動このライン:viewDidLoad()内部

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

、方法/ファンクション/クロージャ外部self(NSObject) ->() -> YourClass()を返すためあなたのクラスではなく、実際にはviewの所有者である(NSObject)。

2.私はGestureRecognizer

1

これはUITextField上のアクションを取得するための正しい方法ではありません

override func viewDidLoad() { 
    super.viewDidLoad() 
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 
0

viewdid負荷にtapDismissTextFieldを追加唯一のビューを残してお勧めします。 UITextFieldの動作を防ぐために、setUserInteractionfalseに変更したと思います。右?あなたのジェスチャーレコグナイザが機能しない理由

だから、あなたは私たちがジレンマに陥っているのを見る必要があります。私たちはジェスチャーがうまくいくようにしたいので、UITextFieldが正常に動作するようにしたくありません。私たちは、あなたが勝つために達成したものがあなたをより良く助けることを知る必要があります。

情報:

カスタムビューを表示wonna場合。たとえばUIPickerViewUITextFieldinputViewプロパティを設定し、認識番号 認識名を削除します。周り

仕事:

あなたはUITextFieldスーパーでタップジェスチャーを使用することができます。そして、タップがUITextFieldのフレームの内側にある場合、 を検出してみてください。周り example

別の作業:

textFieldDidBeginEdittingデリゲート 方法であなたの行動を行うようにしてください。また、キーボードを無効にするためにいくつか調整を行います。 inputViewをnilに設定している可能性があります。

したがって、適切な解決策を得るために何を達成したいのかを正確に知る必要があります。