title: didSelectRowAt(indexPath:) returns wrong row after pan gesture
body: <p>I've implemented a 3 finger pan gesture in a pretty vanilla way:</p>
  
  <pre><code>override func viewDidLoad() {
    super.viewDidLoad()
  
    let triplePanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleTriplePan(recognizer:)))
    triplePanRecognizer.delegate = self
    triplePanRecognizer.isEnabled = true
    triplePanRecognizer.minimumNumberOfTouches = 3
    tableView.addGestureRecognizer(triplePanRecognizer)
  }
  
  @objc func handleTriplePan(recognizer: UIPanGestureRecognizer) {
    switch recognizer.state {
    case .began:
      print("triple pan began")
      tableView.isScrollEnabled = false // You may wanna add this for convenience.
    case .changed:
      print("triple pan changed")
    case .ended:
      print("triple pan ended")
      tableView.isScrollEnabled = true
    case .cancelled:
      print("triple pan cancelled")
      tableView.isScrollEnabled = true
    }
  }
  </code></pre>
  
  <p>Now, after performing a triple pan, on the next row selection, didSelectRowAt(indexPath:) will return the wrong row, in fact, it does not return the selected row, but <strong><em>the one where the previous triple pan started</em></strong>:</p>
  
  <pre><code>override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     print("indexPath: \(indexPath.row)")
  }
  </code></pre>
  
  <p>Is there a way to circumvent this behaviour?</p>
  
  <p>EDIT: I've now tested it in a new project form scratch where everything works as expected. This must be a bug in my project, it happens with the long press recognizer as well.</p>
  
  <p>EDIT 2: I was able to fix this the following way:
  My table view cells made use of 3d touch as well, which is why my cells had an implementation of touchesMoved and touchesEnded. For some reason, the implementation of touchesCancelled was responsible for the selection behaviour. The weird part is that even an empty implementation of this method would trigger this issue. I was able to remove the method and now the selection after pan/long press gestures is as expected.</p>
  
  <p>EDIT 3: Turns out, this whole behaviour occurred because I didn't call super.touchesCancelled inside the touchesCancelled...</p>