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

【iOS开发】Responder Chain做事件传递

iOS事件传递简介 iOS系统的事件响应链是按UI层级传递的。如果我们自己的事件可以在系统的响应链中进行传递的话,那就可以跳出UI层级的困扰了。...UIViewController -> view1 -> view2 -> view3 这个链条是一个包含关系,当他们都可以响应事件时,如果点击了view3,系统是window开始遍历,一直找到最外层的view3.如果view3不处理事件...一般来说我们一个页面上的view不管在哪个层级,它的层级链里面都是有UIViewController这一层的。所以我们可以把事件标识好,在UIViewController这个层级再处理。...sender routerEventWithName:@"事件标识,可以用枚举或者宏常量定义好的string" userInfo:nil]; - (IBAction)firstButtonClicked:(UIButton...routerEventWithName方法,处理掉事件,一般可能是UIViewController中。

64841
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    iOS中很多类型的事件分发,都依赖于响应链;在响应链中,所有对象的基类都是UIResponder,也就是说所有能响应事件的类都是UIResponder的子类,UIApplication/ UIView/...在UIResponder中,提供以下几个方法,几个方法分别表示点击的不同状态,大家看名字就能明白差不多: - (void)touchesBegan:(NSSet *)touches withEvent...这里就说到了另一个问题,UIResponder在知道需要处理事件的时候,还是有决定权的,比如我可以决定让整个响应链继续走下去,或者直接中断掉整个响应链。...如果中断了响应链,那么所有在链上的nextResponder都不会得知有事件发生,iOS也提供了这个方法,其实很简单: 我们在重写TouchesEvents的时候,如果不想让响应链继续传递,就不调用super...有关触摸事件在响应链上的分发,就差不多这么多东西,最重要的是大家可以看那几个touches方法,多做实验,就可以了解的更加深入。

    72310

    IOS触摸事件分发机制详解

    具体的检测工作是通过UIView中两个方法来完成的 - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event...UIResponder UIResponder 类提供了一组接口专门用来响应用户的操作,处理各种事件,其中包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(...在UIKit中,UIApplication、UIView、UIViewController这几个类都是直接继承自UIResponder类 第一响应者(first responder) 第一响应者能够优先处理事件...会将事件传递给响应链中的下一个响应者。...这个操作继续直到一个响应者处理该事件或者没有响应者了。 响应链序列在iOS确定一个事件并将它传递给initial object(通常是view)时开始。

    3.6K90

    iOS 中的事件响应

    iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论...响应者对于接收到的事件有下列操作: 不拦截,默认操作,事件会自动沿着默认的响应链往下传递; 拦截,不再往下分发事件,重写 touchesBegan 进行事件处理,不调用父类的 touchesBegan;...响应链-方法调用 ParentView是TapTestView的父 View,TapTestView没有重写touchesBegan 方法,在ParentView的touchesBegan 方法中打上断点...优先级 当我们在一个添加了手势的UIResponder上执行非连续的双击操作,触发的回调消息如下表所示。...UIButton 会截断响应链的事件传递,也可以利用响应链来寻找 Action Method。 2. UIGestureRecognizer 仍然会先于 UIControl 接收到触摸事件; 3.

    2.8K11

    编码篇-OC跨多层UI事件传递处理

    前言 在 iOS 中,对象间的交互模式大概有这几种:直接 property 传值、delegate、KVO、block、protocol、多态、Target-Action 等等,本文介绍的是一种基于 UIResponder...场景 一个VC的View上放了很多的子视图,(中间有很多层)我们点击了最上面的一个Button,需要把Button的tag传到 VC中 Paste_Image.png 知识点( 此处不讨论代理回调和通知...然后UIResponder对象有一个重要的属性叫做nextResponder, 下一个响应者,可以保证找到当前view的事件的接收者 可以建立一个 UIResponder的类别,在类别中扩建一个方法,...在需要处理的地方重写 UIResponder的类别中的这个方法即可使整个传递终结掉。大大优化了整个事件处理过程。...,VC通过这个指针通过直接操作内存的方式设置这个按钮即可。

    2.2K30

    EDI(电子数据交换)在供应链中是如何工作的?

    EDI(电子数据交换)如何工作,这大概是企业主、公司经理、企业EDI系统管理人员常问的一个问题。尽管现在EDI已经是一项相当广泛的技术,但仍有一些问题需要讨论。...那么EDI(电子数据交换)在供应链中是如何工作的呢?继续阅读下文,您将会找到一个答案。 如果您有接触或是了解过采购业务中传统的文件流通方式,您可能会注意到,纸张操作和邮寄需要花费大量时间。...传统的人工操作模式中,像采购订单发送给供应商,供应商确认采购并发送货物,货物到达买方等业务操作或许可以快速进行,实际上由于人工处理速度低于计算机等原因,文档交换会需要花费更多的时间。...与此同时,在将订单、商品等信息手动录入到交易伙伴的业务平台中花费了大量的时间和精力,占用了大量的人力资源。...此外,由于人工操作带来的错误和损失更是不可估量,很大程度上会严重破坏与交易伙伴的贸易合作关系,对企业未来即业务关系发展造成不利影响。

    3.3K00

    当iOS遇见UI

    iOS所有的UI控件都继承了UIView,而UIView继承了UIResponder基类,UIResponder代表用户操作的响应者。 活动、静态和被动控件 iOS的UI控件大致可分为如下三类。...在iOS应用中,UI控件所属的角色并不是一成不变的,有些控件可根据开发人员的需求选择多种模式运行。...当然,像UIButton之类的按钮控件,除了在活动模式下激发方法之外,它并没有太多其他的功能。...禁用状态的UI控件是不可操作的,如果要禁用某个控件,则可以在Interface Builder中取消选中Enabled复选框,或将控件的enabled属性设为NO。...假如向界面设计文件中添加了一个按钮(UIButton),由于UIButton继承了UIControl基类,因此,可以在Xcode的属性检查器面板中看到如图1所示的UIControl的属性设置面板。

    74910

    蚂蚁区块链第9课 SSLTLS工作原理及在蚂蚁BAAS中的应用

    后来在阿里专家孙善禄的指导下,输出了《蚂蚁区块链第8课 如何创建新的账户?》搞清楚了user.key和pub.txt文件的作用。...在实际应用中:如果 SSL Client 想要校验 SSL server.那么 SSL server 必须要将他的证书 server.crt 传给 client.然后 client 用 ca.crt 去校验...(图一中check可选,我们可以选择不验证服务器证书的有效性) 6)秘钥协商:验证通过后,Server和Client将进行秘钥协商。接下来Server和Client会采用对称秘钥加密。...主要有client.crt,client.key 证书下载 公私钥下载 具体在《蚂蚁区块链第4课 如何创建TEE硬件隐私合约链?》文章做了详细的描述。...重置合约链证书 3.3 证书功能描述和使用 3.3.1 ca.crt、client.key、client.crt说明 如果用户尚未在合约链申请证书,可按照 申请证书 的操作说明去生成和申请证书相关文件

    1.7K30

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

    但是须知:CATransition只针对图层,不针对视图。图层是Core Animation与每个UIView产生联系的工作层面。...重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果的。...iOS中很多类型的事件分发,都依赖于响应链;在响应链中,所有对象的基类都是UIResponder,也就是说所有能响应事件的类都是UIResponder的子类,UIApplication/UIView/...这里就说到了另一个问题,UIResponder在知道需要处理事件的时候,还是有决定权的,比如我可以决定让整个响应链继续走下去,或者直接中断掉整个响应链。...UITouch对象在触摸操作的过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch的内部信息。

    70530

    使用ADO和SQL在Excel工作表中执行查询操作

    学习Excel技术,关注微信公众号: excelperfect 我们可以将存储数据的工作表当作数据库,使用ADO技术,结合SQL查询语句,可以在工作表中获取满足指定条件的数据。...在VBE中,单击菜单“工具——引用”,在“引用”对话框中,找到并选取“Microsoft ActiveX Data Objects 6.1 Library”,如下图1所示。 ?...图1 下面,需要将工作表Sheet2的数据中物品为“苹果”的数据行复制到工作表Sheet3中,如下图2所示。 ?...在同一代码中,只需要连接数据库一次,接着可以执行多个查询操作,无需每次查询前都进行连接。...SQL查询语句为: query = "Select * from [" & wksData.Name _ & "$] Where 物品='苹果' " 在工作表wksData中查询物品为“苹果”的记录

    4.7K20

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

    这些相应的事件就都是在UIResponder中定义的。 广告插播的措不及防:如果您要是觉得这篇文章让您有点收获,随手点个赞会让俺兴奋好久吶。...触摸事件.png 但是在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象”。...响应者链 概念吶,我们就不说了,网上的文章应该一搜一大堆。这里是比较理论化的知识,是比较考验我们对于iOS中触摸事件的理解深度的。这里我就只是用简单的方式,写一下自己对于这部分的理解。...UIButton肯定是放在一个UIView上面,UIView也肯定是放在一个Controller里面。这几个都是响应者对象,总不能让大家一起给用户反馈吧。...方法监听view触摸事件,有很明显的几个缺点 必须得自定义view 由于是在view内部的touches方法中监听触摸事件,因此默认情况下,无法让其他外界对象监听view的触摸事件 不容易区分用户的具体手势行为

    2.3K40

    已有iOS工程中加入Flutter之Cocoapods+Flutter环境方式集成

    flutter_module命名为“kk_flutter” Note:flutter_module的命名要符合dart package name规范,要以小写单词和_相连,否则创建不成功 先给一个不规范的例子...4.2 podfile导入 首先,此方法要求在您的项目上工作的每个开发人员都必须具有本地安装的Flutter SDK版本。 只需在Xcode中构建应用程序即可自动运行脚本以嵌入Dart和插件代码。...,直接让AppDelegate继承自FlutterAppDelegate,这种方法是官方推荐,好处就是可以监听到诸如点击状态栏回到顶部此类操作。...但是这并不是强制的,我们在不能直接继承的情况下,为了能够让我们的Flutter能够响应一部分的App生命周期事件,我们可以在AppDelegate.h中遵循FlutterAppLifeCycleProvider...,通过使用runWithEntrypoint,传入一个字符串参数,以使用其他的dart入口(入口在lib/main.dart文件中),但是请注意,除main()之外的Dart入口点函数必须使用以下注释:

    2.5K30

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

    对于触摸事件UIResponder内部提供了以下方法来处理事件: 事件对象在UIEvent UIEvent.h文件中,我们可以看到有一个UIEventType类型的属性,这个属性表示了当前的响应事件类型...分别有多点触控、摇一摇以及远程操作(在iOS之后新增了3DTouch事件类型)。在一个用户点击事件处理过程中,UIEvent对象是唯一的。...每次点击发生的时候,点击对象都放在一个集合中传入UIResponder的回调方法中,我们通过集合中对象获取用户点击的位置。...其中涉及到了UIView中的两个方法(可以重写),当hitTest返回YES才会调用这个View的 Touch事件,因为如果返回NO,则当前View被排除在相应链之外了。 ?...3.类似地,视图层次中的每个后续视图如果不处理事件都首先传递给它的视图控制器(如果有的话),然后是它的父视图。 4.最上层的容器视图将事件传递给UIWindow对象。

    2.5K30

    iOS面试题:UIWindow,UIView,CALayer的区别

    *rootViewController NS_AVAILABLE_IOS(4_0); // default is nil @end 继承自UIView,是一种特殊的 UIView,通常在一个app中只会有一个...UIView @interface UIView : UIResponder 继承自UIResponder,间接继承自NSObject,主要是用来构建用户界面的,并且可以响应事件。...在创建UIView时,它内部会自动创建一个图层,当UIView需要显示在屏幕上的时候,会调用drawRect:方法进行绘图,并且会将所有内容绘制到自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,这样完成...layer给view提供了基础设施,使得绘制内容和呈现更高效动画更容易、更低耗 layer不参与view的事件处理、不参与响应链 *** 更多:iOS面试题合集

    82030

    【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    , 但是不编译该文件; -- 修改配置 : 点击项目名称, 选择 General 面板, 然后删除 Main Interface 中的 Main 选项; (2) 创建 xib 界面设计 文件 创建 xib...; -- 实际编程对象 : 虽然 UIApplication 代表了整个应用, 但是编程时不直接操作 UIApplication, 开发者一般与 delegate 委托对象交互; -- 全局变量 : UIApplication...UI 控件事件处理方法; IBAction 事件绑定流程 :  -- 需求 : 为UIButton 组件添加点击方法;  -- 创建 UI 组件 : Interface Builder 中创建 UIButton...UIViewController 中的 IBAction 方法 与 界面设计文件中的 UIButton 组件绑定; -- 触发 IBAction 方法 : 界面中的 UIButton 被点击, 就会回调...扩展 : 扩展是匿名的类别, 扩展也要定义的 已有类+任意名.h 中, 在实现类 已有类.m 中需要实现 已有类接口中的内容, 也需要实现扩展中定义的抽象类. */ // OCViewController

    5K30

    iOS开发--事件传递,响应者链条及常见面试题

    在iOS中只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的基类,在UIResponder类中定义了处理上述各种事件的接口。...我们熟悉的 UIApplication、 UIViewController、 UIWindow 和所有继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者链的响应者对象...:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图(最合适来处理的控件),这个过程称之为hit-test view。...如果点击的点在不在当前控件中,返回nil if (!...如果window对象也不处理,则其将事件或消息传递给UIApplication对象 4\.

    85331
    领券