如果子视图正在滚动,则禁用超级视图滚动

Posted

技术标签:

【中文标题】如果子视图正在滚动,则禁用超级视图滚动【英文标题】:Disable superview from scrolling if subview is scrolling 【发布时间】:2014-12-13 00:04:01 【问题描述】:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    // initialize cell

    if let pickerCell = cell as? SettingsPickerCell 
        collectionView.panGestureRecognizer.requireGestureRecognizerToFail(pickerCell.picker.collectionViewController.collectionView!.panGestureRecognizer)
    

    return cell

上面的代码可以工作,虽然丑得要命。我有一个隐藏在视图层次结构中的 scrollView,我需要一种更好的方法来在选择器滚动时禁用集合视图滚动。

我尝试使用 exclusiveTouch 属性,但没有帮助。还有比这更好的方法吗?

【问题讨论】:

这与this answer有关吗? @wmorrison365 我不这么认为,因为我的问题是对该 OP 的回答。此外,寻找的解决方案可能是使用我发布的相同想法的更好的设计模式。 【参考方案1】:

我认为子类化你的集合视图和覆盖的最好方法

func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 

和其他相关方法。在那里您可以控制您的触摸流程并解决您的问题。

【讨论】:

以上是关于如果子视图正在滚动,则禁用超级视图滚动的主要内容,如果未能解决你的问题,请参考以下文章

iOS 从超级视图中删除对象会破坏自动布局并禁用滚动视图

iOS 嵌套滚动视图——一直滚动到超级视图?

如何获得相对于滚动视图超级视图的滚动视图子视图的中心点?

iOS自动布局:相等的空间以适应超级视图宽度[重复]

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

将视图添加/删除到表视图的超级视图后,UITableView 停止滚动