2017-02-22 35 views
1

クリアボタンを有効にしてUITextFieldを持っています。ジェスチャー認識機能をクリアするボタンを妨害する

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) 
tap.cancelsTouchesInView = false 
view.addGestureRecognizer(tap) 

func dismissKeyboard() { 
    view.endEditing(true) 
} 

問題は、このコードは、クリアボタンを妨害することなので、テキストフィールドがクリアされることはありません:私はまた、ユーザが画面上のどこにもタップしたときに、キーボードを閉じるいくつかのコードを持っています。タップジェスチャ認識機能がクリアボタンタップを処理しないようにするにはどうすればよいですか?

+0

UIGestureRecognizerDelegateを追加し、次の行を使用して設定することを忘れないでください。 – dfd

+0

あなたは何が起こるはずですか?もしユーザーがタップしていれば、あなたは何をすべきでしょうか?ボタンが優先されるべきかジェスチャーが起こるか両方か?発砲していない場合は、手動でIBActionを呼び出し、送信者としてボタンを送信する – GregP

+0

ボタンが優先されます。また、画面上に別の通常のUIButtonがありますが、ジェスチャ認識機能。 – user2397282

答えて

2

これが起こらないようにする方法を見つけました。

クリアボタンのタイプはUIButtonなので、ジェスチャ認識機能でこれらのタップを認識させたくありません。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    // Don't handle button taps 
    return !(touch.view is UIButton) 
} 

ライン:ジェスチャー認識はタップを受信したときに

この関数が呼び出され、ユーザーがタップ場所は、そうでないUIButtonと本当だった場合

return !(touch.view is UIButton) 

はfalseを返します。

だから、false =タップはジェスチャーレコグナイザで処理されず、true =タップが処理されます。私はジェスチャー* *ビュー階層をフォロー多分ないだろうと思っているだろう

tap.delegate = self 
関連する問題