iOS拦截控件事件,处理后继续执行原来的消息传递流程

iOS通过代码动态添加和删除控件 iOS开发时,有时候不知道该有多少个控件,需要动态添加或删除,比如:发帖页面。本文将讲解一个动态添加和删除控件的例子。 阅读详情


#import <objc/objc.h>

#import <objc/runtime.h>



- (void)sendEventHooked:(UIEvent *)event {

    

    

    //在这里做你想做的事情吧

   NSLog(@"截获事件:%@", [eventdescription]);

    

    

    

    //执行原来的消息传递流程

    

    [selfperformSelector:@selector(sendEventOriginal:)withObject:event];

    

}



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{


    Method sendEvent =class_getInstanceMethod([UIWindowclass],@selector(sendEvent:));

   Method sendEventMySelf =class_getInstanceMethod([selfclass], @selector(sendEventHooked:));

   IMP sendEventImp =method_getImplementation(sendEvent);

   class_addMethod([UIWindowclass],@selector(sendEventOriginal:), sendEventImp,method_getTypeEncoding(sendEvent));

   IMP sendEventMySelfImp =method_getImplementation(sendEventMySelf);

   class_replaceMethod([UIWindowclass],@selector(sendEvent:), sendEventMySelfImp,method_getTypeEncoding(sendEvent));


    

self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];

    // Override point for customization after application launch.

    if ([[UIDevicecurrentDevice]userInterfaceIdiom] ==UIUserInterfaceIdiomPhone) {

        self.viewController = [[[ViewControlleralloc]initWithNibName:@"ViewController_iPhone"bundle:nil]autorelease];

    }else {

        self.viewController = [[[ViewControlleralloc]initWithNibName:@"ViewController_iPad"bundle:nil]autorelease];

    }

    self.window.rootViewController =self.viewController;

    [self.windowmakeKeyAndVisible];


return YES;

}




然后可以在其它地方创建按钮,就可以截获到按钮触摸事件!



AI搜索优化(GEO)实战指南:抢占智能对话流量入口 AI SEO,是针对生成式AI平台(如DeepSeek、豆包、Kimi等)的优化策略,旨在通过适配AI算法对内容的理解和引用逻辑,提升品牌在AI生成答案中的可见性与权威性,从而在对话式搜索场景中抢占流量入口。:强化内容经验性(Experience)、专业性(Expertise)、权威性(Authoritativeness)、可信度(Trustworthiness)内容需避免夸大描述,提供可验证的细节(如数据、用户评价)。 阅读详情

相关推荐

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 734

ios事件传递响应链基础知识整理

ios基础知识的学习和应用

minld的博客 463

如何实现电路级别的CDM ESD防护

采用先进制程的CMOS工艺,可能具有比以前更薄的栅极氧化物和更大的芯片尺寸,大的衬底可能积累大量的电荷,导致CDM事件期间的高ESD放电峰值电流。传统CDM保护器件使用栅极接地NMOS被添加到输入级的栅极。然而,这种方法通常会在信号路径上引入显著的寄生电容,这不适合RF应用。

weixin_42693135的博客 2500

iOS事件拦截处理

前面分析了一通iOS事件的分发,主要介绍了事件如何找到处理的view,又是如何按照responder chain逐级传递的。这篇文章主要介绍iOS事件的拦截以及特殊处理。

sakulafly的专栏 1万+

智慧工地算法视频分析服务器区域入侵检测AI视频分析技术在煤矿的实战应用

通过实时分析和处理井下视频资料,智慧矿山算法视频分析服务器不仅能够及时发现并预警人员违规行为和设备异常状况,还能够通过智能分析预防潜在的安全风险,从而显著提高煤矿的安全管理水平和生产效率。

EasyDarwin开源社区技术博客 559

SCS 43. 利用Scissor算法从单细胞数据中挖掘临床表型关联的细胞亚群

本文详细介绍了Scissor算法在单细胞转录组数据分析中的应用,该算法能够精准挖掘与临床表型关联的细胞亚群。通过建立单细胞RNA测序数据与临床预测模型的直接关联,Scissor避免了传统聚类方法的局限性,为疾病机制研究和个性化医疗提供了新工具。文章还涵盖了数据预处理、模型选择、结果验证等实战技巧。

weixin_28736335的博客 490

ios事件截获的问题解决的一种方法

在一个view中有图片,有text框,

NOHACKCC的专栏 1159

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3459

IOS响应者链,事件传递和阻断

前几天去面试,被问到响应者链条,突然发现自己也有点模糊,这里自己总结一下,做个记录。 ios中,触摸事件的处理分为两个阶段,传递阶段和响应阶段。 事件传递:事件传递是指触摸事件发生后,事件的传递路径。触摸事件只能有硬件感知(手机),然后由系统处理(ios系统)并分发给当前活动的app。ios中,能够接收事件的对象必须是UIResponseder对象,在app中,第一个接收到事件的是APPDel

ShuiNianiO的博客 891

Windows Server 2019整机备份与异机还原实战:从虚拟机到物理机的完整迁移指南

本文详细介绍了Windows Server 2019整机备份与异机还原的实战操作,涵盖从虚拟机到物理机的完整迁移流程。通过环境准备、备份策略设计、具体操作步骤及迁移后优化等内容,帮助用户实现系统环境的无缝迁移,特别适用于服务器硬件升级、数据中心迁移等场景。

weixin_30555125的博客 131

【零基础】手把手教你使用Docker部署Springboot项目(详细版)

还不会使用Docker部署Springboot项目的小伙伴,不妨进来看看呗,希望文中内容对你有所帮助!

fengprogrammer的博客 2万+

如何阻断用户操作界面

<br />      在iOS程序设计中,往往需要暂时阻断用户操作界面。比如,用户点击了某个按钮后,需要执行一些操作,在这些操作的执行过程中,我们不想让用户操作界面,以避免发生冲突,所以就需暂时阻断用户操作界面。下面是实现这种功能的方法:<br /> <br /> <br />//******************UserInterfaceBlock.h****************************<br /> <br />#import <Foundation/Foundation.h><b

SlimApp 1076

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5706

Windows API 函数

《Windows API函数手册》摘要 本文档是Windows平台开发的权威参考手册,全面收录774个核心API函数,涵盖系统管理、进程线程、窗口消息、文件操作、图形处理等12大功能模块。手册采用结构化编排,主要特点包括: 编码规范 详细区分多字节(char)与宽字符(wchar_t)编码体系 提供LPSTR/LPCWSTR等字符串指针类型的完整解析 说明UTF-8与GBK编码转换的实际应用场景 核心功能模块 窗口创建:完整展示从注册类到消息循环的窗口生命周期 文件操作:覆盖CreateFile/ReadF

gqk01的博客 861

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ios 事件拦截

先介绍下事件分发:  移动平台上的开发主要关注数据以及数据的处理,事件的处理以及UI。所以事件的分发处理是很重要的一个环节,对于一个平台的优劣来说也是一项重要的参数。如果事件的分发设计的不好,一些复杂的UI场景就会变得很难写甚至没法写。从小屏没有触摸的功能机开始到现在大屏多点触摸的智能机,对于事件的分发处理基本思路都是一样的——链(设计模式中有个模式就是职责链chain of respons...

不积跬步 无以至千里 不积小流 无以成江海 782

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

iOS开发- 利用runtime拦截UIButton的点击事件,防止重复点击

应用场景:对于公司原来的一些代码,想对UIButton的点击事件做一部分修改,但是如果使用继承出来的UIBtton来解决的话, 又要改大量的代码,这时候,使用runtime拦截替换发送点击事件的方法可以迅速解决这个问题,超级给力! 不废话,直接上代码 // //  UIControl+UIControl_XY.h //  iOSanimation // //  Created by biyab

wqt925497045的博客 3051

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

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

在iOS中限制事件传递

1)限制事件递交给单个视图 有时候一个页面可能有多个控件,比如tableview的一个cell里面有多个button,如果同时用2个手指点击图片,很可能2个button都会响应,而这个不是我们想要的。视图的exclusiveTouch 属性就能帮到我们。 如果你把这个属性设置为 YES ,你标记这个视图以便当它跟踪触摸 时,它是当前窗口中唯一可以跟踪触摸的视图。窗口中的其它视图将不能接

justinjing的专栏 2933

hit-test的用法总结:如何阻止touch事件传递到子view

今天,群里有人问了这个问题:添加了touch事件之后怎么阻止touch事件传递到子view。其实看了官方的文档Event Handling Guide for iOS的童鞋,应该是没有问题的。但是自己还是总结一下。 触摸之后,主要的步骤如下: (1), 事件分发:如何确定当前点击的点由哪个view来处理? hit-test来确定hit-view (2), 事件响应:确定hit-

taylor的专栏 1万+

iOS 事件传递&响应链

往往在子view超出父view时,超出的部分不会响应点击事件 原因就在于: iOS的事件响应机制 一个触摸事件的响应过程如下: 用户触摸屏幕时,UIKit会生成UIEvent对象来描述触摸事件。对象内部包含了触摸点坐标等信息。 通过Hit Test确定用户触摸的是哪一个UIView。这个步骤通过- (UIView *)hitTest:(CGPoint)point withEvent:(UIEve...

qiangshuting的博客 1万+

Delphi中如何拦截键盘消息

var   st,et,ct: int64; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin   QueryPerformanceCounter(et);   QueryPerformanceFrequency(ct);   if ((et-st)/ct     key:=chr(0);  

chinajobs的专栏 4127

ios 拦截UIButton的响应方法

由于项目的原因,现在需要知道点击了哪个button,响应了哪个方法。结合网上找到的资料,即交换方法 UIKit提供了一组控件:UISwitch开关、UIButton按钮、UISegmentedControl分段控件、UISlider滑块、UITextField文本字段控件、UIPageControl分页控件。控件是对UIView派生类的有用增强及补充,并能够直接附着于导航栏、表格单元,甚至更

freda_h的博客 789

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值、block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: ...

weixin_34411563的博客 208

iOS-事件传递过程

背景:在实际开发中,我们知道点击手机屏幕上控件,就会调用该控件相应的事件。例如,屏幕上有一个Button,我点击这个Button就会触发该Button的事件。那么,系统底层是怎么实现的呢?或者说,这整个流程是怎样的呢?下面,我们就来探索一下。 准备工作: 准备一个控制器 准备六个UIView 准备一个父类,该父类继承UIView,并重写touchesBegan的方法,打印当前UIView的类名,六个

追求灵魂代码 778

通过消息拦截达到在Delphi控件中屏蔽原有事件处理的一种方法

 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TForm1 = class(TForm) btn1: TButton;

siow的程序人生 5214

iOS事件拦截(实现触摸任意位置隐藏指定view)

项目里有一个需求,类似新浪或者腾讯微博的顶部title栏的类别选择器的消失(在选择器展开的时候,触摸屏幕任何地方使其消失)。 最开始的想法是当这个选择器(selectorView)展开的时候,在当前屏幕上加入一个铺满整个屏幕的透明button来拦截所有的触摸事件。 可是这个方案实现起来非常麻烦,也不优雅,而且发现button拦截不到scrollView的滑动事件,所以决定放弃。 后来经过

Louis的专栏 1717
上一篇: 从图片数据获取图片格式信息
下一篇: UITableView 右边索引第一个出现空白情况的解决办法
StudyRecord
博客等级 码龄16年 96粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值