UIScrollView 子视图中滚动事件的锁定处理(在 UIScrollView 超级视图内)

Posted

技术标签:

【中文标题】UIScrollView 子视图中滚动事件的锁定处理(在 UIScrollView 超级视图内)【英文标题】:Lock handling of scroll event in UIScrollView subview (inside a UIScrollView superview) 【发布时间】:2014-09-22 05:06:10 【问题描述】:

我有一个复杂的视图层次结构:

UIScrollView
    - UITableView
        - UICollectionView

UICollectionViewUIScrollView 都水平滚动。现在,我想专门在UICollectionView 上捕获滑动手势,以便超级视图 (UIScrollView) 忽略它。

用户可以向左滑动以到达UICollectionView 的末尾。最后,UICollectionView 上的滑动手势被忽略并被超级视图 (UIScrollView) 捕获,并且界面发生变化。我怎样才能防止这种情况发生?

注意:我使用的是 UIScrollView 和 UICollectionView 提供的默认滑动功能,即我没有添加任何自定义滑动手势处理。

【问题讨论】:

您可以使用 UIScrollView 的委托方法,在其中您可以识别/决定哪个 scrollView 将能够滚动 可以使用scrollEnable属性来决定 【参考方案1】:

在您的 ViewController.m 中

-(void)viewDidLoad

   scrollView.delegate = self;
   collectionView.delegate = self;


- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

   if (the scrollView didn't reached the end)
      then collectionView can't scroll
   else
      collectionView can scroll
   

您可以使用contentOffset 属性检查scrollView 是否到达末尾

别忘了声明你使用的是scrollView的委托

希望对你有帮助

【讨论】:

以上是关于UIScrollView 子视图中滚动事件的锁定处理(在 UIScrollView 超级视图内)的主要内容,如果未能解决你的问题,请参考以下文章

将 UIButtons 添加为子视图时 UIScrollView 不滚动

如何在 UIScrollview 中触发 UIViewcontroller 视图的旋转事件

如何将触摸事件从一个视图传递到另一个视图

(iphone) uiscrollview 触摸。取消内容触摸并开始滚动

UIScrollView addSubview 已经在滚动视图中的视图

相对于 UIScrollView 锁定 UIView 位置