UITableViewにUIPanGestureRecognizerを使ってもスクロールできなくならないようにしたい。
UITableView
にパンを認識させたいと思ってUIPanGestureRecognizer
を使ってみたのですが、それをしたらテーブルを上下にスクロールさせることができなくなってしまいました。
これを解消するためにGoogle検索をしたところ海外の質問に対する回答でで下のコードを記述すると良いと書いてありました。
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
let translation = panGestureRecognizer.translation(in: superview)
if fabs(translation.x) > fabs(translation.y) {
return true
}
return false
}
return false
}
が、これをどこに書いたら良いのかわかりません。
いろいろなところに試してみましたが、うまくいきません。
そもそもこれでうまくいくのかどうかもわかりません。
どなたか教えてくださいませんか。
以下テーブルを作っている私のコードです
var table = UITableView()
extension ViewController: UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate {
func equipList(_ notification: Notification) {
//テーブル設定(省略)
table.delegate = self
table.dataSource = self
let pan = UIPanGestureRecognizer(target: self, action: #selector(pan(_:)))
pan.delegate = self
table.addGestureRecognizer(pan)
self.view.addSubview(table)
}
@objc(tableView:cellForRowAtIndexPath:) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
//セル設定(省略)
return cell
}
func tableView(_ tableView: UITableView, numberOfSection section: Int) -> Int {
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}
}
これに
extension UITableView {
open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
print(gestureRecognizer)
if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
let translation = panGestureRecognizer.translation(in: table)
if fabs(translation.x) > fabs(translation.y) {
print("A")
return true
}
print("B")
return false
}
print("C")
return false
}
}
}
エラーが出なかったからこれかな?といった感じで記述してみたのですけれど、うまくいきません。
gestureRecognizer
ではUIScrollViewPanGestureRecognizer
が呼ばれているようで。ちなみに全てBが返ってきて、スクロールはできません。