37721


`UITableView`にパンを認識させたいと思って`UIPanGestureRecognizer`を使ってみたのですが、それをしたらテーブルを上下にスクロールさせることができなくなってしまいました。

これを解消するためにGoogle検索をしたところ海外の質問に対する回答でで下のコードを記述すると良いと書いてありました。

[code]

    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
    }
    
[/code]

が、これをどこに書いたら良いのかわかりません。  
いろいろなところに試してみましたが、うまくいきません。  
そもそもこれでうまくいくのかどうかもわかりません。

どなたか教えてくださいませんか。

以下テーブルを作っている私のコードです

[code]

    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
        }
    }
    
[/code]

これに

[code]

        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
            }
        }
    }
    
[/code]

エラーが出なかったからこれかな？といった感じで記述してみたのですけれど、うまくいきません。  
`gestureRecognizer`では`UIScrollViewPanGestureRecognizer`が呼ばれているようで。ちなみに全てBが返ってきて、スクロールはできません。


CC BY-SA 3.0
2017-09-04T19:39:46.923
37718
2017-09-05T03:49:06.783
2017-09-05T03:49:06.783
21092
19428
question
ios xcode swift3 uitableview
UITableViewにUIPanGestureRecognizerを使ってもスクロールできなくならないようにしたい。

[code]

    extension UITableView {
    
[/code]

の中ではなく、

[code]

    extension ViewController: UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate {
    
[/code]

の中に定義するのではダメでしょうか？

イメージ的には

[code]

    extension ViewController: UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate {
        func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
            if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
                let translation = panGestureRecognizer.translation(in: panGestureRecognizer.view)
                if fabs(translation.x) > fabs(translation.y) {
                    return true
                }
                return false
            }
            return false
        }
    
    ・・・
    
[/code]

こういった感じです。


CC BY-SA 3.0
2017-09-05T01:14:43.933
37721
2017-09-05T01:14:43.933
369
37718
answer