TableViewのタップイベントを分ける
失敗ログ
以下の画像のようなcellで画像部分とそれ以外のイベントを分ける必要がある時、私がすぐに思いついたのはUILongTapGuestureでジェスチャーを分ける方法でした。
UILongTapGuestureRecognizerで対処から位置がズレたらキャンセルする
しかしcellないのUIにUILongTapGuestureRecognizerを付与してしまうとtableViewをスクロールした時にスクロールされないという問題が発生します。
ジェスチャーがtouches○○のイベント処理を完全に奪ってしまっているのが原因です。
解決策
super.touchesBegan(touches, with: event)を呼び出すタイミングを遅くすれば実現できます。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches where touch.view == yasaiImageView{
//やりたい処理
return
}
super.touchesBegan(touches, with: event)
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches where touch.view == yasaiImageView {
//やりたい処理
return
}
super.touchesEnded(touches, with: event)
}
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches where touch.view == yasaiImageView {
//やりたい処理
return
}
super.touchesCancelled(touches, with: event)
}
※注意すべき点はタップした領域が別の操作をしたいViewだった場合最後にreturnを入れてあげることです。
これを入れないとdidSelectRowAtも呼ばれてしまうため二重で処理が走ってしまいます。