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

未在子视图上调用touchesBegan()

()是指在iOS开发中,当一个父视图上的触摸事件需要传递给子视图处理时,需要在子视图的touchesBegan()方法中调用父视图的touchesBegan()方法,以确保触摸事件能够正确地传递下去。

具体来说,当用户在父视图上进行触摸操作时,父视图会首先接收到触摸事件。如果父视图上有子视图,并且希望子视图也能够响应触摸事件,就需要在子视图的touchesBegan()方法中调用父视图的touchesBegan()方法。

这样做的好处是可以实现触摸事件的传递和响应链。当父视图的touchesBegan()方法被调用时,可以在该方法中判断是否需要将触摸事件传递给子视图处理,如果需要,则调用子视图的touchesBegan()方法,以便子视图能够响应触摸事件。

未在子视图上调用touchesBegan()可能导致触摸事件无法传递给子视图处理,从而影响到子视图的交互功能。因此,在开发过程中,需要注意在合适的地方调用touchesBegan()方法,以确保触摸事件能够正确地传递和处理。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

史上最详细的iOS之事件的传递和响应机制-原理篇

:(NSSet *)touches withEvent:(UIEvent *)event // 一根或者多根手指在view移动,系统会自动调用view的下面方法(随着手指的移动,会持续调用该方法) -...touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent...又会重复上面的两个步骤(传递事件给控件,1.判断控件能否接受事件,2.点在不在控件)    4.如此循环遍历控件,直到找到最合适的view,如果没有更合适的控件,那么自己就成为最合适的view...UIView *childView = self.subviews[i]; // 坐标系的转换,把窗口上的点转换为控件的点 // 把自己控件的点转换成控件的点...2>找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理touchesBegan…touchesMoved…touchedEnded…3>这些touches方法的默认做法是将事件顺着响应者链条向上传递

11.1K70
  • iOS 小技能: Responder Chain(响应者链)【下篇】

    如果两根手指同时触摸一个view,那么view只会调用一次 touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象。...如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent:方法,并且每次调用时的touches参数中只包含一个UITouch对象 根据touches...,但是这仅仅是整个事件处理过程的第一步 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理 touchesBegan… touchesMoved… touchedEnded…...找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理。...2.2 事件传递的完整过程 先将事件对象由往下传递(由父控件传递给控件),找到最合适的控件来处理这个事件。 调用最合适控件的touches….方法 如果调用了[super touches….]

    94330

    iOS 中的事件响应

    从后往前遍历视图重复执行 指的是按照 FILO 的原则,将其所有视图按照「后添加的先遍历」的规则进行命中测试。...,点击TapTestView区域,相关函数调用如上图所示,可以看出先调用了TapTestView的touchesBegan方法,然后接着调用了ParentView的touchesBegan 方法。...,当手势识别失败时才开始调用 touchesBegan 函数。...:inContentView:方法询问是否将事件传递给对应的视图 (如果返回 NO, 则该事件不会传递给对应的视图,如果返回 YES,则该事件会传递给对应的视图,默认为 YES); 当事件被传递给视图后..., 如果手指位置又发生了移动, 则调用自身的 -touchesShouldCancelInContentView: 方法询问是否取消已经传递给视图的事件。

    2.7K11

    iOS面试题:事件传递和响应机制

    主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步。 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理。 2....,也不管触摸点在不在这个控件,事件都会先传递给这个控件,随后再调用hitTest:withEvent:方法 2.如果hitTest:withEvent:方法中返回nil,那么调用该方法的控件本身和其控件都不是最合适的...3.3 pointInside:withEvent 方法介绍 判断点在不在当前view(方法调用者的坐标系上)如果返回YES,代表点在方法调用者的坐标系上;返回NO代表点不在方法调用者的坐标系上,那么方法调用者也就不能处理事件...事件的响应 4.1 触摸事件处理的整体过程 1 用户点击屏幕后产生的一个触摸事件,经过一系列的传递过程后,会找到最合适的视图控件来处理这个事件 2 找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理...."); // 2.再调用系统的默认做法,再把事件交给上一个响应者处理 [super touchesBegan:touches withEvent:event]; } 事件的传递和响应的区别

    1.2K10

    iOS-UITouch事件处理详解1. iOS中的事件基本介绍2.UITouch3.UIEvent4. 事件的产生和传递5. 通过UITouch方法监听View的触摸事件的缺点

    触摸事件 //一根或者多根手指开始触摸view时自动调用view的下面方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event...; //一根或者多根手指在view移动时自动调用view的下面方法(随着手指的移动,会持续调用该方法) - (void)touchesMoved:(NSSet *)touches withEvent:...touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent...,这也是整个事件处理过程的第一步 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理 4.2 那么主窗口如何找到最合适的控件来处理事件?...(CGPoint)point withEvent:(nullable UIEvent *)event; // 用来判断当前这个点在不在方法调用,点必须在方法调用者的坐标系中,判断才会准确 -

    1.7K60

    事件传递、响应者链条

    一、事件 iOS里有三种事件:触摸(touch)、加速(motion)、远程控制 在UIResponder里,有以下事件处理 // 触摸事件 - (void)touchesBegan:(NSSet...[self pointInside:point withEvent:event]) return nil; // 3.从后往前遍历自己的控件,看是否有控件更适合响应此事件 int count...return fitView; } } // 没有找到比自己更合适的view return self; } 三、响应者链条 当找到最合适的响应者之后, 便会调用控件相应的...(即调用super的touches方法),从之前往下走的路线往上回传,在其中加入了Viewtroller来处理 如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父View...在视图层次结构的最顶级视图,传递给ViewController ViewController将事件传递给window对象进行处理 window对象继续将事件或消息传递给UIApplication

    88310

    iOS事件响应控制 原

    UIApplication会取出队列中最前面的事件,发消息给UIWindow,然后UIWindow会对其所有视图调用hitTest:withEvent:这个方法,这个方法会返回一个UIView的对象,...这个方法在执行的时候,它会调用当前视图的pointInside:withEvent:这个方法,如果触摸事件在当前视图范围内,pointInside:withEvent:会返回YES,否则会返回NO;如果返回...YES,则会遍历当前视图的所有视图,统统发送hitTest:withEvent:这个消息,如果返回NO,则hitTest:withEvent:方法返回nil; 上面说起来有些绕,其实就是:hitTest...:withEvent:方法会一层一层的向上找,若最上层响应的视图pointInside:withEvent:返回YES,则返回此视图,如果所有的都返回nil,则返回当前视图本身self。...:(NSSet *)touches withEvent:(UIEvent *)event{     NSLog(@"点击了Image"); } 然后将他们创建在一个View: - (void)viewDidLoad

    54640

    iOS-控件响应用户控制事件之事件处理

    ,这也是整个事件处理过程的第一步 4.找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理 touchesBegan… touchesMoved… touchedEnded… 如果父控件不能接收触摸事件...从后往前遍历控件,重复前面的两个步骤 如果没有符合条件的控件,那么就自己最适合处理 原理 // point:是方法调用者坐标系上的触摸点的位置 - (UIView *)hitTest:(CGPoint...(由父控件传递给控件),找到最合适的控件来处理这个事件。...2> 调用最合适控件的touches….方法 3> 如果调用了[super touches….]...2> 如果当前这个view不是控制器的view,那么父控件就是上一个响应者 响应者链的事件传递过程 如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图视图层次结构的最顶级视图

    97270

    touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event使用

    首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。...根据不通的触摸状态,程序会调用相应的处理函数,这些函数包括以下几个: -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent...touchesBegan:withEvent方法; 当手指在屏幕移时,动就会调用touchesMoved:withEvent方法; 当手指离开屏幕时,就会调用...因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上的触摸对象...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。

    56020

    touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event

    touchesBegan:withEvent:方法,touches参数中装着2个UITouch对象 如果这两根手指一前一后分开触摸同一个view,那么view会分别调用2次touchesBegan:withEvent...:方法,并且每次调用时的touches参数中只包含一个UITouch对象 二、方法介绍 UIResponder内部提供了以下方法来处理事件 1....触摸事件 (1)手指按下事件 - (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event;...force; (10)获取最大触摸压力值 @property(nonatomic,readonly) CGFloat maximumPossibleForce; 方法: (1)返回当前触摸点在view的位置...(2)获取远程控制事件 @property(nonatomic,readonly) UIEventSubtype subtype; UIEventSubtype 枚举: // 不包含任何事件类型

    2.6K100

    UI篇-UIResponder之事件传递和响应精析

    UIView对象并不一定会把事件传递给每一个view,因为UIView是通过hitTest方法来判断点击事件发生在哪个子view上面的,会采用逆序查询也就是优先查询后加载的试图,这样做也是为了优化查找速度...1.调用hitTest方法进行最优响应视图查询 hidden = YES userInteractionEnabled = NO alpha < 0.01 以上三种情况会使该方法返回nil,即当前视图下无最优响应视图...然后我们依次点击A、B视图看下hitTes调用顺序是否和预期一致 ? 点击AView ?...//******************* 华丽的分割线 **************** 系统先调用pointInSide: WithEvent:判断当前视图以及这些视图视图是否能接收这次点击事件...,然后在调用hitTest: withEvent:依次获取处理这个事件的所有视图对象,在获取所有的可处理事件对象后,开始调用这些对象的touches回调方法 在自定义View中重写 touchesBegan

    2.5K30

    iOS Programming – 触摸事件处理(2)

    根据不通的触摸状态,程序会调用相应的处理函数,这些函数包括以下几个:             -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent...touchesBegan:withEvent方法; 当手指在屏幕移时,动就会调用touchesMoved:withEvent方法; 当手指离开屏幕时,就会调用touchesEnded:withEvent...因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上的触摸对象...下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。...,再设置当前视图的位置。

    92370

    《Motion Design for iOS》(四十二)

    我们调用super后,就可以在这两个方法中添加任何我们想要的行为。 让我们添加一个Pop动画到 -touchesBegan:withEvent:中去。...如果动画不是已经存在,我们就和平常一样创建一个新的Pop动画对象,设置弹簧的动作属性,比如弹性,设置toValue,然后添加动画到视图或者layer。...在这个例子中,我们动画了视图的尺寸,所以我们将动画添加到视图上。 现在让我们在触摸事件结束时做同样的事情。这次代码放在 -touchesEnded:withEvent:中。...它基本和我们已经添加的代码一样,只是重复它,修改动画类型,然后改变toValue值。这里是完整的代码,以及一些注释。...// 当用户开始点击时立即调用 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 看动画是否已经被添加到视图或者

    35010

    IOS触摸事件分发机制详解

    前言 很多时候大家都不关心IOS触摸事件的分发机制的实现原理,当遇到以下几种情形的时候你很可能抓破头皮都找不到解决方案: 某个点击消息由父视图来处理,视图怎么把消息传递给父视图 这个按钮不灵敏,怎么扩大点击响应区域...Hit-Testing就完美的解决了这个问题,通过检测触摸点是否在相关的视图边界范围内,如果在,就继续递归检测该视图的所有视图,离用户最近的那个视图的边界如果包含触摸点,那么它就是我们要找的Hit-Test...pointInside:withEvent: 方法来检测point是否在view的边界范围内,如果在view的边界范围内,则返回YES,然后,在视图中递归调用 hitTest:withEvent:...如果不在范围内,则返回NO,那么它的所有视图都会被忽略,hitTest:withEvent:返回 nil 。...父视图成为first responder,视图把事件沿着响应链转发。

    3.6K90

    iOS14开发-触摸与手势识别

    方法 // 返回一个CGPoint类型的值,表示触摸在view的位置。 // 返回的位置是针对view的坐标系。 // 调用时传入的view参数为空的话,返回的是触摸点在整个窗口的位置 。...-> Bool { } UIApplication 调用 UIWindow 的hitTest方法将触摸事件传递给 UIWindow,如果 UIWindow 能够响应触摸事件,则调用 UIView 的...(默认操作) (2)拦截,事件不再往上传递,重写touchesBegan方法,但不调用父类的touchesBegan方法。...(3)不拦截,事件继续往上传递,重写touchesBegan方法,并调用父类的touchesBegan方法,即super.touchesBegan(touches, with: event)。...使用步骤 创建手势实例,指定回调方法,当手势开始,改变、或结束时,回调方法被调用。 将手势添加到需要的 UIView

    2.3K20
    领券