将UIScrollView的垂直滚动转发到兄弟UITableView

13

我有一个视图控制器,它的层次结构如下:

视图控制器:

  • UIScrollView (可水平滚动)
  • UITableView (可垂直滚动)

enter image description here

我想将我的UIScrollView的垂直滚动转发给同级的UITableView,这样当用户在UIScrollView上向上滚动时,UITableView会相应向上滚动。最好的方法是什么?

我尝试过以下方法:

  • scrollViewDidScroll中检测垂直滚动,但因为滚动视图的contentOffset没有改变而未被调用。
  • 子类化UIScrollView并重写touchesMoved,但在此类中无法将触摸转发到表视图,因为我没有它的引用。

2
您可以通过在scrollView上创建一个透明视图并使用它来捕获手势来实现此操作。传递垂直手势;拦截水平手势并将其传递给tableView。关键部分是在您的透明视图中覆盖hitTest:withEvent方法。(如果这还不够,请告诉我,我会发布一个实际的答案。 :-)) - Anna Dickinson
2个回答

3
这将使你的滚动与UITableViewUIScrollView同时进行,并应用@Stephen Johnson的块。
 - (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer
 shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
 {
     return YES;
 }

你能详细解释一下吗?我无法让它工作。谢谢! - McDJ
可以再解释一下吗?我无法将self设置为UIScrollViewGestureRecognizer的代理! - Hashem Aboonajmi

3
如果tableview包含在scroll view中,我认为你可以设置scroll view的手势识别器仅在table view的手势识别器失败时响应。我还没有尝试过这个方法,但你应该能够为每个视图的手势建立一个依赖关系。
UITableView* tableView = ...;
UIScrollView* scrollView = ...;
for (UIGestureRecognizer* r in scrollView.gestureRecognizers)
{
    for (UIGestureRecognizer* tableRecognizer in tableView.gestureRecognizers)
    {
        [r requireGestureRecognizerToFail:tableRecognizer];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接