Forward vertical scrolls from UIScrollView to a si

2019-03-25 03:16发布

问题:

I have a view controller with this hierarchy:

View Controller:

  • UIScrollView (scrollable horizontally)
  • UITableView (scrollable vertically)

I want to forward the vertical scrolls from my UIScrollView to the sibling UITableView, so that when the user scrolls up on the UIScrollView, the UITableView will scroll up instead. What would be the best way to do it?

I have tried these:

  • Detecting the vertical scroll in scrollViewDidScroll, it doesn't get called because the contentOffset of the scroll view does not change.
  • Subclassing the UIScrollView and overriding touchesMoved, I can't forward the touches to the table view because I don't have a reference to it in this class.

回答1:

If the tableview is contained within the scroll view I believe you can set up the scroll view's gesture recognizers to respond only if the table view's gesture recognizers fail. I haven't had a chance to try this, but you should be able to set up a dependency between the gestures for each of the views.

UITableView* tableView = ...;
UIScrollView* scrollView = ...;
for (UIGestureRecognizer* r in scrollView.gestureRecognizers)
{
    for (UIGestureRecognizer* tableRecognizer in tableView.gestureRecognizers)
    {
        [r requireGestureRecognizerToFail:tableRecognizer];
    }
}


回答2:

This will make your scroll simultaneously with UITableView and UIScrollView and apply @Stephen Johnson's block

 - (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
 shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
 {
     return YES;
 }