###前提
storyboard上で以下のような配置をしました。
親ビューの中に子ビューを配置し、その上にボタンやスライダーを配置したものです。
この親ビューにタップジェスチャーをaddすると、
子ビューをタップしてもUIButtonとUISliderのツマミ以外の部分をタップしてしまうと親ビューのタップジェスチャーが呼び出されてしまいます。
###実現したいこと
上のようにしたいため、
子ビューにタップしたときに親ビューのタップジェスチャーが呼び出されてしまうと、困るのです。
もっとも困るのは、
UISliderのツマミを動かしただけも、タップされたと判断して親ビューのタップジェスチャーが呼び出されてしまうということです。
こんな感じになってしまいます・・・↓
###試したこと
UIGestureRecognizerDelegateを批准してshouldReceiveTouchメソッドで親ビュー以外がタップされた時にfalseを返すようにしたのですが、今度は親ビュー部分をタップしても子ビューをタップしてもfalseを返されてしまうようになってしまいました・・・
###詳細なコード
swift
1class ViewController: UIViewController, UIGestureRecognizerDelegate { 2 //デリゲートに批准する。 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 //省略 6 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKoView)) 7 self.oyaView.addGestureRecognizer(tapGesture) 8 //親ビュー(oyaView)にジェスチャーをadd 9 tapGesture.cancelsTouchesInView = false 10 tapGesture.delegate = self 11 //デリゲートを指定する。 12 } 13 14 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 15 if (touch.view?.isDescendant(of: oyaView))! { 16 return false 17 } 18 return true 19 } 20 //メソッドを導入 21 func dismissKoView() { 22 //以下略
###補足情報(言語/FW/ツール等のバージョンなど)
swift3 xcode8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/21 12:46
2017/11/21 13:34
2017/11/22 13:50