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

如何阻止父UIView接收来自UIButton的触摸?

要阻止父UIView接收来自UIButton的触摸,可以通过以下几种方式实现:

  1. 设置UIButton的isUserInteractionEnabled属性为true,禁用按钮的用户交互功能。这样,当按钮被点击时,触摸事件将不会传递给父UIView。
  2. 使用UIButton的addTarget(_:action:for:)方法,将按钮的触摸事件与一个空的方法绑定。这样,当按钮被点击时,触摸事件将被处理,但不会传递给父UIView。
  3. 在父UIView的触摸事件处理方法中,判断触摸事件的源视图是否为UIButton,如果是,则不执行任何操作,从而阻止父UIView接收来自UIButton的触摸。

需要注意的是,以上方法适用于UIKit框架下的iOS开发。在其他平台或框架中,可能会有不同的实现方式。

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

以上链接提供了腾讯云在相关领域的产品和服务介绍,可以根据具体需求选择适合的产品。

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

相关·内容

事件传递、响应者链条

,能够处理touchesBegan等触摸事件 当一个Touch事件产生时,要先找到响应者,iOS通过Hit-Test机制来寻找响应者,每一个UIView(继承自UIResponder)都有以下方法 -...:原理 // point是该视图坐标系上点 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断自己能否接收触摸事件...(即调用supertouches方法),从之前往下走路线往上回传,在其中加入了Viewtroller来处理 如果view控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它View...四、实例分析 UIButton继承链是: UIButton->UIControl->UIView->UIResponder->NSObject UIApplication能够接受事件,因为UIApplication...和UIView一样继承自UIResponder 下面是一个点击事件方法过程 UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd

87710

iOS 事件传递和处理

在用户触摸屏幕之后,屏幕硬件会接受用户操作,并采集关键参数传递给IOKit,而IOKit将这些数据打包并传给SpringBoard.app,继而转发给前台App。...UIWindow是UIView子类,UIViewhitTest方法实现和上述过程一致。 思考: UIView在调用子视图hitTest时,是先调用哪些子视图?...,再是视图视图,如果某个视图是ViewController.view属性,还会调用ViewController方法,直到UIWindow、UIApplication、UIApplicationDelegate...手势处理发生在哪一步 手势(UIGestureRecognizer)是iPhone重要交互方式,手势识别 介绍了手势是如何识别,甚至可以添加自定义手势。...2、如果给UIButton添加Tap手势,点击UIButton时候是触发UIButtonTap手势,还是触发UIButton点击回调?

1.5K20
  • iOS面试题-UI篇

    因为控件subViews数组已经对它有一个强引用 IB中User Defined Runtime Attributes如何使用?...特别是如果在我们界面上有多个这样UIButton实例,那就会很糟糕了 面试题持续整理更新中,如果你正在面试或者想一起进阶,不妨添加一下交流群1012951431一起交流。...-(void)viewDidLayoutSubviews; 触摸事件传递 触摸事件传递是从父控件传递到子控件 如果控件不能接收触摸事件,那么子控件就不可能接收触摸事件 不能接受触摸事件四种情况...userInteractionEnabled默认就是NO,因此UIImageView以及它子控件默认是不能接收触摸事件 如何找到最合适处理事件控件: 首先,判断自己能否接收触摸事件 可以通过重写...,那么就自己处理 事件响应者链 如果当前view是控制器view,那么就传递给控制器 如果控制器不存在,则将其传递给它控件 在视图层次结构最顶层视图也不能处理接收事件或消息,则将事件或消息传递给

    2K21

    【IOS开发基础系列】UIView专题

    这个只发生在接收者从它视图上移除或者接收者添加到视图中而不是添加到window中。...removeFromSuperview     把接收者从它视图或者窗口移除,并在响应链中移除。...willMoveToSuperview:     通知接收者他视图将会改变到特定视图(也有可能是nil) - (void)willMoveToSuperview:(UIView *)newSuperview...4.2.2 (未解决)DrawRect如何清空之前内容 4.2.3 DrawRect之后注意用hitTest:withEvent:方法处理事件接收 //用户触摸时第一时间加载内容 - (UIView*...如果一个子视图区域超过视图bound区域(视图clipsToBounds属性为NO,这样超过视图bound区域子视图内容也会显示),那么正常情况下对子视图在视图之外区域触摸操作不会被识别

    59130

    跟iOS UI捉迷藏(如何获取用户点击行为控件title)

    1.如何获取用户控件点击行为 事实上,由于获取“所见所得”点击view行为,所以,思路上应该是对uiview或者及其子类得某个事件方法hook到,这样触发点击(广义上是触摸)行为后,可以根据发送事件确定点击...这里我们用第一个,sendAction:to:forEvent: 里面有三个参数,最后一个是event,可以通过allTouches方法,可以获得触摸集合,可以判断多点触摸事件 而touch.view...进行判断,并获取title了 触摸事件参考文章:https://www.cnblogs.com/syxchina/archive/2012/10/14/2723541.html 2.如何获取不同控件title...先从简单开始 一阶获取控件:UIButton 响应uiviewUIButton,即用户点击是按钮,则立马获取(即一阶获取) NSString * title = [[button titleLabel...,响应是一个UIView 层级关系如下: 它与UILabel是平行,获取方法是先找到viewUICollectionViewCell,再找到其子view,才可以 错位获取,UISegmentedControl

    1.3K10

    IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】

    Subview B、C; 2、触摸点不在ViewB内,触摸点在ViewC内部,所以检查ViewCSubview D、E; 3、触摸点不在ViewD内,触摸点发生在ViewE内部,并且ViewE没有...subview,所以ViewE属于ViewA中包含这个点最小单位,所以ViewE变成了该次触摸事件hit-Test View; 4.1.2注意点 1、默认hit-testing顺序是按照UIView...: [Log] UIButton ----STPView --------UIView ------------STPFeedViewController ---------------...对应实现就可以了,相反,有些时候你只需要做一个小改变,如上所示,但是你不想中断响应链,你就需要调用类对应实现。...一般来说,如果我们需要一个对象去处理一个非触摸事件(摇一摇,RemoteControlEvents,调用系统复制、粘贴框等),我们要确保该对象是UIResponder子类,如果我们要接收到事件的话,我们需要做两件事情

    66710

    iOS 中事件响应

    响应者对于接收事件有下列操作: 不拦截,默认操作,事件会自动沿着默认响应链往下传递; 拦截,不再往下分发事件,重写 touchesBegan 进行事件处理,不调用 touchesBegan;...,这是默认状态; began:手势识别器已接收到识别为连续手势触摸对象; changed:手势识别器已接收到被识别为连续手势变化触摸; ended:手势识别器已接收到被识别为连续手势结束触摸; cancelled...:手势识别器已接收到导致取消连续手势触摸; failed:手势识别器收到了一个无法识别为手势多点触控序列; recognized:手势识别器接收到一个多点触控序列,并将其识别为它手势。...UIControl 内部重写了 UIView 提供gestureRecognizerShouldBegin方法,返回 false,使 View 上手势不参与到事件响应中去,但是不会影响其自身手势...UIButton 会截断响应链事件传递,也可以利用响应链来寻找 Action Method。 2. UIGestureRecognizer 仍然会先于 UIControl 接收触摸事件; 3.

    2.6K11

    iOS事件响应控制 原

    以前遇到一个项目,一个UIImageView对象上面有一个UIButton对象,然而项目的需求需要在点击 button同时,UIImageView也接收到点击事件,在不使用代理和通知方法前提下...这一步是什么意思,其实很简单,就是找到你所触摸点对应那个最上层视图,它工作原理是这样:当用户发出事件后,会产生一个触摸事件,系统会将该事件加入到一个由UIApplication管理事件队列中,...UIApplication会取出队列中最前面的事件,发消息给UIWindow,然后UIWindow会对其所有子视图调用hitTest:withEvent:这个方法,这个方法会返回一个UIView对象,...这个方法在执行时候,它会调用当前视图pointInside:withEvent:这个方法,如果触摸事件在当前视图范围内,pointInside:withEvent:会返回YES,否则会返回NO;如果返回...现在,在回到我们刚开始问题,如何让btn响应同时imageView也响应,我们这样做: - (void)viewDidLoad {     [super viewDidLoad];     MyImageView

    54040

    Quartz2D复习(二) --- 手势解锁

    这次支付宝手机客户端升级,把手势解锁那个功能去掉了,引起很多人抱怨,觉得少了手势解锁保护,个人信息容易泄漏了。。。...那么手势解锁功能是怎么是实现呢,这里使用Quart2D来简单模拟一下, 先看下截图效果: ? ? ? 按钮有两个背景图片,一个默认样式,一个用于选中样式: ? ?...自定义view名称为:GestureLockView GestureLockView.h文件: #import @interface GestureLockView : UIView..., 设置被选中按钮 64 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 65 //NSLog(@"触摸移动...109 return [touch locationInView:self]; //获取当前触点在对象中位置 110 } 111 112 //根据坐标获取按钮对象 113 - (UIButton

    47940

    【iOS 开发】从 setNeedsLayout 说起

    UIKit interactions with your view objects 上图对应事件序列如下: 用户触摸屏幕 硬件报告触摸事件给 UIKit 框架 UIKit 框架将触摸事件打包成 UIEvent...---- 如何善用 View Drawing Cycle 一个很常见例子是,一个 iPad App,横屏和竖屏时界面布局不一样,那么你可以监听设备旋转,在设备旋转时执行 setNeedsLayout...会触发 UIView layoutSubviews 事件 改变一个 UIView 大小时候也会触发 UIView layoutSubviews 事件 然后按 Apple 要求方式来做就好了...,去看里面的秒表页面,这个页面里面的两个按钮是没有 UIButton 默认动画,点击之后,按钮会瞬间改变自身状态(颜色、内部 Label 内容),这种情况我们需要跳出 View Drawing...实现方法如下: extension UIButton { func quickButtonAction() { UIView.performWithoutAnimation({

    69410

    【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

    UITextView : 多行文本标签 控件, 支持 多行显示, 滚动功能, 用户可编辑 ; 5.UIProgressView : 进度条 控件, 水平 进度条 ; 6.UISlider : 滑块 控件, 可触摸滑动进度条...UIView 简介 : 1.定义 : iOS 手机屏幕上所有能看到内容都是 UIViewUIView 子类, 如 按钮 UIButton, 文字 UILabel 等都是继承自 UIView...; 2.本质 : 每个 UIView 都可以当做一个容器, UIView 可以嵌套 另外若干个 UIView; 3.控件 与 子控件 : iOS 整个界面是一个 UIView 控件, 该控件是控件...*, 然后***由 UIViewController 负责创建与其对应 UIView 界面***, 这个 UIView 是全屏控件容器, UIViewController 负责管理这个全屏容器...]; ; 上述代码将控件背景颜色修改为 蓝色; 2.添加按钮 ( 功能 修改控件 随机 背景变颜色 ) : ① 添加UIButton控件 : 添加一个 UIButton 控件, 修改标题为 “修改随机颜色

    4.8K30

    IOS触摸事件分发机制详解

    前言 很多时候大家都不关心IOS触摸事件分发机制实现原理,当遇到以下几种情形时候你很可能抓破头皮都找不到解决方案: 某个点击消息由视图来处理,子视图怎么把消息传递给视图 这个按钮不灵敏,怎么扩大点击响应区域...怎么在一个页面处理手绘、表情拖动放缩、文本编辑三种消息 阅读本文,你会明白两个问题:IOS如何找到响应者、响应者是如何做出响应,明白这两个问题你就能解决类似上述疑难杂症。...Hit-Testing 屏幕上有很多UIView,你点击一下屏幕,IOS是怎么知道你点击是哪个UIView呢?...以下图片很能说明响应链是如何传递。 ?...解决办法通常有两种: 视图和子视图都重写- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event

    3.5K90

    iOS UIButton 点击无响应解决办法

    3、按钮frame超出了视图frame,这个是最容易出现,按钮freme必须在视图frame内部点击才有效,如下图,按钮点击红框里区域是不响应。...:(UIEvent *)event 这是View里一个方法,处理流程如下 首先调用当前视图pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:...最后,这个触摸事件交给主窗口hitTest:withEvent:方法返回视图对象去处理。...所以我们可以在返回nil时进行处理,因为这个时候button是在View外 //返回一个view来响应事件 - (UIView *)hitTest:(CGPoint)point withEvent:...UIButton 点击无响应解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

    3.4K10

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

    我们只能通过子类继承类,重写子类方法方式处理UIView触摸事件(注意:我说UIView触摸事件而不是说 UIViewController触摸事件)。...所以,还是那句话,想处理UIView触摸事件,必须自定义UIView子类继承自UIView。 2.1.UIView拖拽 那么,如何实现UIView拖拽呢?...3.2.事件传递 触摸事件传递是从父控件传递到子控件 也就是UIApplication->window->寻找处理事件最合适view 注 意: 如果控件不能接受触摸事件,那么子控件就不可能接收触摸事件...UIView不能接收触摸事件三种情况: 不允许交互:userInteractionEnabled = NO 隐藏:如果把控件隐藏,那么子控件也会隐藏,隐藏控件不能接受事件 透明度:如果设置一个控件透明度...总结一下 1.点击一个UIView或产生一个触摸事件A,这个触摸事件A会被添加到由UIApplication管理事件队列中(即,首先接收到事件是UIApplication)。

    11K70

    UIGestureRecognizer  手势识别一、概念介绍二、UIView 分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

    ; 2、移除一个手势 - (void)removeGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer; 3、是否接收一个手势触摸事件,默认为...View视图 @property(nullable, nonatomic,readonly) UIView *view; 4、是否取消触摸控件响应 默认为YES,这种情况下当手势识别器识别到触摸之后...只有在识别失败之后才会将触摸事件发给触摸控件,这种情况下控件view响应会延迟约0.15ms。...,在手势识别成功后,发送给touchesCancelled消息给触摸控件view,手势识别失败时,会延迟大概0.15ms,期间没有接收到别的触摸才会发送touchesEnded触摸结束方法,如果设置为NO...- (CGPoint)locationInView:(nullable UIView*)view; 6、获取触摸手指数 - (NSUInteger)numberOfTouches; 7、多指触摸触摸点相对于指定视图位置

    3K81

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

    我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder...UITouch对象 UITouch方法 - (CGPoint)locationInView:(UIView *)view; 返回值表示触摸在view上位置 这里返回位置是针对view坐标系(以...,这也是整个事件处理过程第一步 4.找到合适视图控件后,就会调用视图控件touches方法来作具体事件处理 touchesBegan… touchesMoved… touchedEnded… 如果控件不能接收触摸事件...,那么子控件就不可能接收触摸事件(掌握) 如何找到最合适控件来处理事件?...自己是否能接收触摸事件? 触摸点是否在自己身上?

    96470

    《Motion Design for iOS》(十五)

    UIView是用来构建你界面的UIKit Framework中基本界面对象。每个视图都可能伴随着文本、形状或图片绘制。...这些是为某些功能或特性特定特殊UIView对象。包括作为界面按钮UIButton、用来显示图片UIImageView、显示文本UILabel和显示列表UITableView。...视图,用来包含UITableView中一行元素 UILabel中帖子标题 评论数量UIButton,由一个评论气泡图和评论数量组成 显示帖子URLUILable UILabel中显示帖子点值和子板...UIView对象有很多职责,其中之一就是事件处理,即响应触摸事件。如果你想的话你界面中所有视图都可以响应触摸事件,或者你可以指定只有特定视图会在用户触摸它们时响应。...一个UIView本质上是一个包含内部图形矩形。在屏幕上布局,靠近或在其他视图顶部,还可能会有高级透明效果来整合到一起或者快速绘制。

    85540

    记录下UIButton图文妙用和子控件优先显示

    UIButton用处特别多,这里只记录下把按钮应用在图文显示场景,和需要把图片作为按钮背景图片显示场景; 另外记录下在控件子控件优先显示方法(控件置于最前面和置于最后面)。...)bringSubviewToFront:(UIView *)view;  // 将子控件view显示在控件所有子控件最前面 - (void)sendSubviewToBack:(UIView *...)view;  //将子控件view显示在控件所有子控件最后面 示例代码: /** 测试子控件优先显示(置前和置后) */ - (void)testSubControlShowFront{...:11]; //将子控件redView在控件view所有子控件最前面显示 [self.view bringSubviewToFront:redView...= [self.view viewWithTag:13]; //获取紫色子控件 //将子控件purpleView在控件view所有子控件最前面显示

    1.7K30

    iOS中手势应用1. 四类事件主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势使用

    触摸事件.png 但是在iOS中不是任何对象都能处理事件,只有继承了UIResponder对象才能接收并处理事件。我们称之为“响应者对象”。...UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件。...UIButton肯定是放在一个UIView上面,UIView也肯定是放在一个Controller里面。这几个都是响应者对象,总不能让大家一起给用户反馈吧。...最终找到这个干活控件,我们学术上就叫做第一响应者对象。找到了负责处理按钮之后如何给出相应处理呢?大概过程就是这样: button尝试处理事件。如果它不能处理事件,则将事件传递给其父视图。...button视图(superview)尝试处理事件。如果这个视图还不能处理事件,则继续将视图继续往上级传。 上层视图(topmost view)会尝试处理事件。

    2.2K40
    领券