UIResponder详解(响应者)

「OC」剪不断,理还乱——UIResponder、UIGestureRecognizer、UIControl的响应优先级探究 上一篇我们记录了编译器是如何找到最佳响应者以及响应者链的构成「OC」初识iOS事件处理流程,那么今天我们就来探究,UIResponder、UIGestureRecognizer、UIControl在处理事件时的优先级,以及相关的细节。让我们开始UIResponder、UIGestureRecognizer、UIControl的爱恨情仇吧先简单介绍一下本文的三个主角。 阅读详情

UIResponder Class Reference

Managing the Responder Chain

[plain]  view plain copy
  1. 1.- (UIResponder *)nextResponder  
返回接收者的下一个相应,如果没有就返回nil

UIResponder类不自动存储和设置下一个响应者,而是默认返回nil。子类必须override这个方法来设置下一个响应者。

UIView实现了这个方法,因为可以返回管理这个UIView的UIViewController或者它的父类;

UIViewController实现了这个方法,返回UIViewController的View的父View;

UIWindow发挥UIApplication对象;

UIApplication返回nil

[plain]  view plain copy
  1. 2.- (BOOL)isFirstResponder  
判断一个对象是否是第一响应者。
[plain]  view plain copy
  1. 3.- (BOOL)canBecomeFirstResponder  
判断一个对象是否可以成为第一响应者。默认返回NO。

如果一个响应对象通过这个方法返回YES,那么它成为了第一响应对象,并且可以接收触摸事件和动作消息。

子类必须overrider这个方法才可以成为第一响应者。

You must not send this message to a view that is not currently attached to the view hierarchy. The result is undefined.

[plain]  view plain copy
  1. 3.- (BOOL)becomeFirstResponder  
如果接收者接受了第一响应者的状态就返回YES,拒绝了这个状态就返回NO。默认返回YES。

子类可以override这个方法来更新状态或者执行一些行为,比如高亮选中项。

一个响应对象只有当前响应者可以放弃第一响应者状态,并且新的响应者可以成为第一响应者,才能成为第一响应对象。

[plain]  view plain copy
  1. 4.- (BOOL)canResignFirstResponder  
如果一个对象可以放弃对象响应者就返回YES。默认返回YES。

[plain]  view plain copy
  1. 5.- (BOOL)resignFirstResponder  
默认实现返回YES,放弃第一响应状态。子类可以override这个方法来更新状态或者执行一些行为,比如取消高亮选中项。

如果返回NO,拒绝放弃第一响应状态。

如果你override这个方法,必须调用父类的实现[super resignFirstResponder].

Managing Input Views

[plain]  view plain copy
  1. 1.@property (readonly, retain) UIView *inputView  
当一个对象变成第一响应者的时候显示的View

This property is typically used to replace the system-supplied keyboard that is presented for UITextField and UITextView objects.

UITextField和UITextView如果设置了inputView那么在becomeFirstResponder时不会显示键盘,而现实自定义的inputView;如果设置了inputAccessoryView那么在becomeFirstResponder时会在键盘的顶端显示自定义的inputAccessoryView。

[plain]  view plain copy
  1. 2.@property (readonly, retain) UIView *inputAccessoryView  

This property is typically used to attach an accessory view to the system-supplied keyboard that is presented for UITextField andUITextView objects.

[plain]  view plain copy
  1. 3.- (void)reloadInputViews  
当对象成为第一响应者的时候更新inputView和accessoryView。

Responding to Touch Events

[plain]  view plain copy
  1. 1.- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
通知接收者当一个或多个手指在UIView或UIWindow上点下了。
将消息转发给下一个响应者,将消息发送给父类,不要将消息直接传递给下一个响应者。

如果你override这个方法而没有调用super..,你必须同样override其它响应触摸事件的方法,你要是空实现就好。

默认是不支持多点触摸的,如果想要响应多点触摸,你只要吧UIView的 multipleTouchEnabled 属性设置为YES即可。

[plain]  view plain copy
  1. 2.- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event  
手指移动
[plain]  view plain copy
  1. 3.- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event  
手指抬起
[plain]  view plain copy
  1. 4.- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event  
当收到一个系统干扰需要取消触摸事件时才会调用该方法,这种系统干扰往往会引起应用程序长时间没有响应或者一个View从window上移除了。
当收到touchesCancelled:withEvent:消息的时候需要清除所有通过touchesBegan:withEvent:创建的内容。

Responding to Motion Events

[plain]  view plain copy
  1. 1.- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event  
通知接收者一个动作开始了。
当一个动作开始了和结束了的时候iOS才会通知接收者。it doesn’t report individual shakes. 接收者必须是接收动作事件的第一响应者。
[plain]  view plain copy
  1. 2.- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event  
通知接收者一个动作结束了。
[plain]  view plain copy
  1. 3.- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event  
一个动作被取消了。雷同 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

Responding to Remote-Control Events

[plain]  view plain copy
  1. 1.- (void)remoteControlReceivedWithEvent:(UIEvent *)event  
接收到一个远程控制事件。比如耳机控制。
允许传递远程控制事件,必须调用UIApplication的beginReceivingRemoteControlEvents方法;关闭远程控制,调用endReceivingRemoteControlEvents。

Getting the Undo Manager

[plain]  view plain copy
  1. 1.@property(readonly) NSUndoManager *undoManager  
返回在响应链中最近的共享undo manager。
默认的,每个应用程序的window都有一个undo manager:a shared object for managing undo and redo operations.然而,在响应链中任何对象的类都有它们自己的undo manager,

Validating Commands

[plain]  view plain copy
  1. 1.- (BOOL)canPerformAction:(SEL)action withSender:(id)sender  

YES if the the command identified by action should be enabled or NO if it should be disabled. Returning YES means that your class can handle the command in the current context.

APM32F103 配置CAN 摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。 阅读详情

相关推荐

实测对比:DJI O3、Walksnail Avatar、HDZero三大高清图传,谁才是低延迟王者?

本文对DJI O3、Walksnail Avatar V2和HDZero三大高清图传系统进行了实测对比,重点分析其在FPV飞行中的低延迟表现。通过专业测试环境和量化数据,揭示HDZero在原生低延迟架构上的优势,DJI O3在画质与延迟间的平衡,以及Walksnail的动态码率调整特点,为不同场景下的选购提供决策依据。

weixin_30756499的博客 446

UIResponder详解

UIResponder Class Reference Managing the Responder Chain 1.- (UIResponder *)nextResponder返回接收者的下一个相应,如果没有就返回nil UIResponder类不自动存储和设置下一个响应者,而是默认返回nil。子类必须override这个方法来设置下一个响应者。 UIView实现了这个方法,因为可以

小巨人 1万+

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

iOS开发——响应链(Responder Chain)的深入理解和代码示例

我在之前一篇博客《iOS响应者链Responder Chain浅析》中对iOS开发中遇到的响应者链概念有了基本的了解。但是仅仅停留在理解概念的基础上还是远远不够的。该博客我们会通过代码案例来深入理解响应链。该博客的示例上传至 https://github.com/chenyufeng1991/ResponderChain  。(1)首先来说说第一响应者(First Responder)。响应事件的

乞力马扎罗的雪CYF的博客 1万+

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 428

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

iOS 16 UIResponderForwarderWantsForwardingFromResponder Crash问题解决方案

UIResponderForwarderWantsForwardingFromResponder Crash问题解决

假装自己很用心的博客 1958

Raspberry Pi Pico SDK开发-Timer-定时

RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 本实例将演示如何使用Timer的定时功能。

视觉与物联智能 2040

iOS 关于第一响应者的惊天大崩溃!

惊天大崩溃 为什么说是惊天大崩溃? 因为一崩溃就直接到了main函数,而且没有一点崩溃信息,一点都没有。 自定义了一个输入框控件 在点击输入框时 直接来到这里: 调试 多次调试的过程中 发现崩溃闪退的过程中 并不是马上退出到主屏慕 而是界面卡了好几秒 才退出的 多次调试 iPhone 5s 10.3.2 : 正常运行 iPhone 6 11.2.2 : 点击输入框,直接崩溃 iPhon...

豪冷的博客 880

ZW3D 二次开发-制作插件

1.Windows 7 SP1 或 Windows 10 或 Windows 11(推荐 Windows 11)2.Visual studio 2017-2022 (或 C/C++的任何其他集成开发环境)(推荐 Visual studio 2022)3.ZW3D 2023 或以上版本(建议使用与 ZW3D 一致的 API 的版本)4.Qt5.9.7(for Windows)博主学习使用环境的是:Windows 11 Version 24H2 + Visual studio 2022 + Qt5.9.7(fo

fhqiwmc的博客 810

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 351

iOS UIEvent事件及UIResponder响应者

iOS 事件总线,响应者链条

ccflying88的专栏 1337

【GameFramework框架内置模块】10、本地化(Localization)

本地化(Localization),也就是我们所说的不同地区的语言适配,比如说中文版“你好”,英文版是“Hello”。GameFramework在本地化方面,不仅支持文本的本地化,还支持任意资源的本地化,比如说游戏中释放烟花的特效也可以做出不同地区的版本,使得中文版烟花里面的“新年好”字样的特效,在英文版里面是“Happy New Year”字样的特效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2303

uiresponder_ios-响应者链uiresponder uievent uicontrol和使用

uiresponderHave you ever asked yourself: 您是否曾经问过自己: What on earth is this “first responder” thing when I’m dealing with UITextFields? 当我处理UITextField时,“第一响应者”到底是什么? Why do UIViews subclass things lik...

weixin_26745865的博客 344

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iOS - UIEvent事件及UIResponder响应者

在iOS中不是所有的对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,称之为响应者对象; UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能接收并处理事件; UIEvent 是由硬件捕获到的一个表示用户操作设备的对象,事件分为三类:触摸事件、晃动事件、远程控制事件,一个触摸事件包含一个或者

gongyuhonglou的博客 901

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[译] iOS 响应者链 UIResponder、UIEvent 和 UIControl 的使用

原文地址:iOS Responder Chain: UIResponder, UIEvent, UIControl and uses 原文作者:Bruno Rocha 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:iWeslie 校对者:swants 当我用使用 UITextField 究竟谁是第一响应者? 为什么 UIView 像 UIRes...

weixin_33777877的博客 753

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

iOS总结-有关UITouch事件(三)之 UIResponder和响应者链条

参考:https://blog.youkuaiyun.com/zeng_zhiming/article/details/71747881 https://www.jianshu.com/p/44a5b59e7e85https://www.jianshu.com/p/4ad8b71246f7 UIResponder UIResponder类是专门用来响应用户的操作处理各种事件的,触摸事件Touch Ev...

qq_28551705的博客 536

iOS 中的事件、响应者对象、UIResponder

iOS中的事件

LayneCheung 314

响应者链UIResponder-扩大UIButton的点击范围

在开发中,我们经常看到有按钮等的点击,会出现响应事件。按钮->view->ViewController->UIWindow->UIApplication,这就形成了一个响应链。本篇将讲述响应链的具体底层实现,大约花费10-15分钟左右,欢迎点评!!! 一、知识 继承UIResponder的对象,我们称之为响应者对象。我们常用到的UIApplication、UIWi...

weixin_30376453的博客 168

PyTorch unfold深入解析:从im2col原理到卷积底层实现与踩坑

卷积神经网络是深度学习视觉任务的基石,其底层实现常依赖im2col算法将滑窗操作转换为高效矩阵乘法,从而充分利用GPU并行计算能力。PyTorch中的unfold算子正是这一思想的直接体现,它按指定窗口、步长、膨胀率切分张量,为卷积、注意力等模型提供底层支撑。理解unfold的数据排布、尺寸公式和反向传播中的col2im梯度累加机制,对模型优化、算子融合与部署至关重要。本文从手动实现im2col出发,对比PyTorch官方接口,详述参数含义、常见陷阱与工程性能取舍,帮助读者真正吃透滑窗类操作的底层实现。

weixin_34239592的博客 428

UIKit 框架之UIResponder

前面博客有讲触摸事件提过响应事件和响应者链,而管理响应者链的正是UIResponder。 一、代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"window:%@",[self...

weixin_34132768的博客 126

事件传递和响应者链

在使用手机的过程中,会产生很多的交互事件,如触摸屏幕,摇晃,按下按键,使用耳机等外接设备操控设备等,这些事件都需要系统去响应并处理,这篇文章简单将简单介绍系统如何响应,处理事件。

liusir0324的博客 1051

Day3 IOS中的UIResponder

在IOS中UIResponder类是用来响应用户的各种事件的,包括触摸事件、运动事件、远程控制事件,UIApplication、UIView、UIViewController这几个类都直接继承于UIResponder,UIWindow继承UIView,所以这些类以及他们的子类都可以响应事件,在IOS里,将这些能响应事件的对象称之为响应者。

weixin_43640566的博客 811

iOS事件处理,手势和UIResponder

UIResponder UIResponder是iOS中用于处理用户事件的API,可以处理触摸事件、按压事件(3D touch)、远程控制事件、硬件运动事件。可以通过touchesBegan、pressesBegan、motionBegan、remoteControlReceivedWithEvent等方法,获取到对应的回调消息。UIResponder不只用来接收事件,还可以处理和传递对应的事件,如果当前响应者不能处理,则转发给其他合适的响应者处理。 应用程序通过响应者来接收和处理事件,响应者可以是继承

gcs的博客 723
上一篇: UIResponder详解(响应者)
下一篇: instancetype和id区别
一秀
博客等级 码龄14年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值