首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

父CollectionView上子视图阻止手势的gestureRecognizerShouldBegin

是一个手势识别器的回调方法,用于决定手势识别器是否应该开始执行。当在父CollectionView中存在子视图时,可以使用这个方法来控制子视图是否响应手势。

在iOS开发中,可以通过实现UIGestureRecognizerDelegate协议中的gestureRecognizerShouldBegin方法来处理该问题。具体步骤如下:

  1. 首先,确保你的视图控制器遵循UIGestureRecognizerDelegate协议,并设置自身为手势识别器的代理,例如:
代码语言:txt
复制
class MyViewController: UIViewController, UIGestureRecognizerDelegate {
    // ...
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置手势识别器代理
        collectionView.gestureRecognizers?.forEach { gestureRecognizer in
            gestureRecognizer.delegate = self
        }
    }
    // ...
}
  1. 然后,在gestureRecognizerShouldBegin方法中,判断手势识别器的触发视图是否为子视图,如果是则返回false,阻止手势的执行,例如:
代码语言:txt
复制
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if let tappedView = gestureRecognizer.view, tappedView.isDescendant(of: collectionView) {
        return false
    }
    return true
}

这样,当手势触摸的视图是CollectionView的子视图时,手势识别器将不会开始执行,从而阻止了手势的响应。

该方法适用于需要在CollectionView中的子视图上阻止手势的场景,例如,当子视图是一个可滑动的控件(如ScrollView)时,可以使用该方法来避免与CollectionView的滑动手势冲突。

推荐的腾讯云相关产品:无。

参考链接:

  • UIGestureRecognizerDelegate文档:https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate
  • UIGestureRecognizer文档:https://developer.apple.com/documentation/uikit/uigesturerecognizer
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iOS 中的事件响应

    从后往前遍历子视图重复执行 指的是按照 FILO 的原则,将其所有子视图按照「后添加的先遍历」的规则进行命中测试。...利用重写hitTest或者point方法扩大 View 的点击范围。 这种需求在一些图标的点击事件上非常常见,类似需求还包括:子 view 超出了父 view 的 bounds 响应事件等。...对于所有绑定到父 View 上的 UIGestureRecognizer,除了它们本身的 delegate 之外,第一响应者也会收到这个方法的调用。...UIControl 内部重写了 UIView 提供的的gestureRecognizerShouldBegin方法,返回 false,使父 View 上的手势不参与到事件响应中去,但是不会影响其自身的手势...:inContentView:方法询问是否将事件传递给对应的子视图 (如果返回 NO, 则该事件不会传递给对应的子视图,如果返回 YES,则该事件会传递给对应的子视图,默认为 YES); 当事件被传递给子视图后

    2.8K11

    ios-ScrollView添加到view上,view的touchesBegan无法执行

    这几天做的时候碰到了这么个问题,就是当我们把ScrollView添加到控制器的view上,或者添加到UICollectionViewCell上面,scrollView的父视图的touchesBegan都无法响应...而当我们把scrollView的userInteractionEnabled改成false的时候,父视图的touchesBegan就可以执行。这里记录下。...还有就是当我们自定义了UIScrollView,往里面添加单击手势的时候,只会响应单击手势的点击,而不会响应touchesBegan方法。...tableView和collectionView,textView应该也都是类似的。因为它们都继承自UIScroller。...根据一些资料,其实原因应该是这样的就是手势识别是对touch的一个封装,UIScrollView支持捏合手势,然后一般来说,如果做过手势监听的控件就都会屏蔽掉touch事件。

    1K30

    iOS 自定义转场动画

    UIViewController *)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; //取出转场前后视图控制器上的视图...containerView,要做转场动画的视图就必须要加入containerView上才能进行,可以理解containerView管理着所有做转场动画的视图 UIView *containerView...这个代理方法依赖于上方的方法 ,这个代理实际上是根据交互百分比来控制上方的动画过程百分比 - (nullable id 手势触发 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { // 注意...// 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器 if (self.childViewControllers.count == 1) { // 表示用户在根控制器界面

    1.1K90

    Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

    事实上,它既不是 Cell 视图,也不是 Supplementary View,而是 UICollectionView 的 Decoration View;Decoration View 不同与前两者,...UIGestureRecognizer 手势拖拽 在 iOS9 之后,UICollectionView 的属性自带重新排序的效果,这里不得不提 Apple 为 UICollectionView 推出的几个重要方法...: •开始交互•更新交互位置•结束交互•取消交互 在为 UICollectionView 添加手势后,根据手势提供的三种状态,分别调用上面的四个方法,来实现拖拽排序;另外,既然 Cell 的顺序会被调整...,那我们还得及时的更新数据源,来保证视图刷新后,导致拖拽的结果被还原,具体实现代码如下: 添加手势 // 添加手势 let longPressGesture = UILongPressGestureRecognizer...但当我真正的去整理它的一些技术点时,我发现它实在是太灵活了,以前觉得追加视图,装饰视图这些东西很简单,几行代码的事情,但事实上,当你想要去实现一些高度自定义的界面的时候,你才会认识到自己的不足,你并没有对这些知识有更深层次的认知

    2.2K10

    iOS 自定义转场动画

    UIViewController *)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; //取出转场前后视图控制器上的视图...containerView,要做转场动画的视图就必须要加入containerView上才能进行,可以理解containerView管理着所有做转场动画的视图 UIView *containerView...这个代理方法依赖于上方的方法 ,这个代理实际上是根据交互百分比来控制上方的动画过程百分比 - (nullable id 手势触发 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { // 注意...// 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器 if (self.childViewControllers.count == 1) { // 表示用户在根控制器界面

    1.3K50

    iOS 无侵入埋点组件总结

    2.3.1 唯一标识(viewPath)的获取: 整个 APP 的视图结构可以看成是一颗树(viewTree),树的根节点就是 UIWindow,树的枝干由 UIViewController 及 UIView...很容易想到的就是使用目标 view到根之间的每个节点的深度(层次)组成一个路径,而节点的深度(层次)是指此节点在父节点中的 index。...这样确实能够唯一的表示此 view 了,但是有一个缺点:它的可读性很差。因此在此基础上又增加了每个节点的名称,节点的名称由当前节点的 view 的类名来表示。同时在开头都添加了一个页面名称作为标识。...3.3 分析及实现 3.3.1 需要添加埋点统计的地方 button 相关的点击事件 页面进入、页面推出 tableView 的点击 collectionView 的点击 手势相关事件 3.3.2 分析...tableView、collectionView、手势的点击事件与上述实现方法类似。

    3K31

    iOS全屏滑动代码

    ;         // 创建全屏滑动手势,调用系统自带滑动手势的target的action方法     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer...pan.delegate = self;         // 给导航控制器的view添加全屏滑动手势     [self.view addGestureRecognizer:pan];         ...// 禁止使用系统自带的滑动手势     self.interactivePopGestureRecognizer.enabled = NO; } // 什么时候调用:每次触发手势之前都会询问下代理,是否触发...// 作用:拦截手势触发 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {    // 注意...// 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器     if (self.childViewControllers.count == 1) {             /

    1.1K00

    iOS14开发-触摸与手势识别

    记录了触摸事件产生或变化时的时间。 (5)phase:触摸事件的周期,即触摸开始、触摸点移动、触摸结束和中途取消。 方法 // 返回一个CGPoint类型的值,表示触摸在view上的位置。...如果能,那么 UIWindow 会从后往前遍历自己的子 UIView,将事件向下传递。...遍历每一个子 UIView 时,都会重复上面的操作(判断能否响应触摸事件,能则继续遍历子 UIView,直到找到一个 UIView)直到找到最合适的 UIView。...(默认操作) (2)拦截,事件不再往上传递,重写touchesBegan方法,但不调用父类的touchesBegan方法。...将手势添加到需要的 UIView 上。每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定的一样,回调方法就会调用。

    2.3K20

    iOS全屏滑动代码

    ;         // 创建全屏滑动手势,调用系统自带滑动手势的target的action方法     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer...pan.delegate = self;         // 给导航控制器的view添加全屏滑动手势     [self.view addGestureRecognizer:pan];         ...// 禁止使用系统自带的滑动手势     self.interactivePopGestureRecognizer.enabled = NO; } // 什么时候调用:每次触发手势之前都会询问下代理,是否触发...// 作用:拦截手势触发 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {    // 注意...// 判断导航控制器是否只有一个子控制器,如果只有一个子控制器,肯定是根控制器     if (self.childViewControllers.count == 1) {             /

    1.4K10

    iOS右滑返回的实现【修订】

    :返回YES允许右滑手势的激活,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer...这个方法是在手势将要激活前调用:返回YES允许右滑手势的激活,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer...,发生当前不可以手势返回,可先检查为什么当前状态,系统不允许你的手势返回,例如是否隐藏了 navigationBar,或者隐藏了系统的返回按钮?...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的.../** 往类上添加新的方法与其实现 @param class 相应的类 @param methodSel 添加的方法 @param methodSelImpl 包含方法实现的SEL */

    1.7K20

    教你写个多表视图

    multi_table.gif 如图所示的多表视图是一个很常用的东西,之前我是用UIScrollView和UITableViewController做的。...把当前的控制器作为一个父控制器,添加三个UITableViewController的实例作为子控制器,把父控制器中的 scrollView 作为容器,然后添加子控制器中的 tableView 作为子视图...pagingEnabled = true collectionView?.bounces = false 这样滑动的时候就会有翻页的段落感,滑到边界的时候也不会有回弹效果。...然后要用 layout 控制布局,用最常用的 UICollectionViewFlowLayout 就行了,设置单元格的宽高,既然是翻页,宽肯定是跟屏幕等宽,高度就看你需求了,但是不要超过 collectionView...这样就完成了一个多表视图,实际项目一般会在 table 上方放个小滑块指示器什么的,也很简单,只要在cellForItemAtIndexPath方法中根据indexPath.section来设置滑块位置就好了

    1.3K30

    iOS右滑返回的实现(interactivePopGestureRecognizer)

    :返回YES允许右滑手势的激活,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer...这个方法是在手势将要激活前调用:返回YES允许右滑手势的激活,返回NO不允许右滑手势的激活 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer...,发生当前不可以手势返回,可先检查为什么当前状态,系统不允许你的手势返回,例如是否隐藏了 navigationBar,或者隐藏了系统的返回按钮?...方法将手势返回强制加回来 2.3 动态添加方法 使用场景: 在消息发送和消息转发时会用到动态添加方法 全局控制返回手势 下面的+addMethod方法有三个参数,第一个参数是要添加方法的类,第二个参数是方法的.../** 往类上添加新的方法与其实现 @param class 相应的类 @param methodSel 添加的方法 @param methodSelImpl 包含方法实现的SEL */

    3.3K20

    iOS学习——UIView的研究

    ,也是直接采用block的方式实现 视图上手势相关的扩展 UIView (UIViewGestureRecognizers)  ,主要提供添加、移除和手势开始前回调3个方法 视图上运动效果相关的扩展 UIView...的,与父视图相同. 114 115 UIViewTintAdjustmentModeNormal, //!.../** 自动调整子视图与父视图的位置,默认UIViewAutoresizingNone */ 225 @property(nonatomic) UIViewAutoresizing autoresizingMask...frame上定义的对齐矩阵的边框 */ 517 #if UIKIT_DEFINE_AS_PROPERTIES 518 @property(nonatomic, readonly) UIEdgeInsets...,视图的压缩改变方式,是水平缩小还是垂直缩小,并返回一个优先权(确定有多大的优先级阻止自己变小) */ 549 - (UILayoutPriority)contentCompressionResistancePriorityForAxis

    2.8K80

    (转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController

    这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和...在一些开源社区上分享的效果比较炫的代码,有不少是使用UICollectionView做的,UICollectionViewController是很实用的,很有必要好好的搞一下。 一....1.继承关系 由上图可知,UICollectionViewController的父亲(父类)是UIViewController, 而UIViewController的父亲是UIResponder,UIResponder...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...当创建自定义视图控制器或者展示控制器时,你可以重写默认的实现方法来调整你视图控制器的内容。例如,你可以使用该方法来调整子视图控制器的大小或位置。

    5.5K40

    iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController

    这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和...在一些开源社区上分享的效果比较炫的代码,有不少是使用UICollectionView做的,UICollectionViewController是很实用的,很有必要好好的搞一下。 一. ...1.继承关系 由上图可知,UICollectionViewController的父亲(父类)是UIViewController, 而UIViewController的父亲是UIResponder,UIResponder...UIContentContainer 是iOS8之后添加的新的协议,也是和Size Class相关的协议。该协议中的方法可以帮助你适配视图控制器上的内容,比如内容尺寸和位置等。...当创建自定义视图控制器或者展示控制器时,你可以重写默认的实现方法来调整你视图控制器的内容。例如,你可以使用该方法来调整子视图控制器的大小或位置。

    1.6K60
    领券