当前位置: 首页 > article >正文

UI学习:通知传值

文章目录通知传值核心概念什么是通知中心三个核心角色通知的组成通知的生命周期举例讲解通知发送的对象通知传值通知传值是 iOS 开发中一种解耦的传值方式它允许没有直接引用关系的对象之间进行通信。核心概念什么是通知中心NSNotificationCenter是一个单例对象负责管理通知的发送和接收。它像一个广播站发送者发布通知不需要知道谁在监听接收者监听通知不需要知道谁在发送通知中心负责转发三个核心角色角色说明对应方法通知对象携带信息的载体NSNotification观察者监听通知的对象addObserver:selector:name:object:发布者发送通知的对象postNotificationName:object:userInfo:通知的组成NSNotification 包含三个部分 - name: 通知名称唯一标识 - object: 发送通知的对象通常是 self - userInfo: 传递的数据字典通知的生命周期观察者注册 → 2. 发送通知 → 3. 通知中心分发 → 4. 观察者回调 → 5. 移除观察者举例讲解VCSecond 有一个 TextField输入文字后通过通知传给 VCFirst 的 Label 显示创建VCFirst 和 VCSecond 两个视图控制器给VCFirst 定义属性showLahbel用来显示传值的结果, 定义button 来通过调用事件切换视图控制器定义通知的名称VCFirsrt.m// 定义通知名称staticNSString*constkTextFieldNotificationTextFieldNotification;interfaceVCFirst()property(nonatomic,strong)UILabel*showLabel;property(nonatomic,strong)UIButton*pushButton;end定义通知名称的作用:通知名称就像一个频道号或广播频率决定了通知发送方和接收方能否匹配上。创建VCFirst 的Label 和 UIButton, 并注册通知监听// VCFirst.m-(void)viewDidLoad{[superviewDidLoad];self.view.backgroundColor[UIColor whiteColor];self.titleFirst VC;// 创建 Label用于显示接收的数据self.showLabel[[UILabel alloc]initWithFrame:CGRectMake(50,250,300,50)];self.showLabel.text等待接收文字...;self.showLabel.textAlignmentNSTextAlignmentCenter;self.showLabel.backgroundColor[UIColor lightGrayColor];self.showLabel.textColor[UIColor blackColor];[self.view addSubview:self.showLabel];// 创建按钮跳转到 Second VCself.pushButton[UIButton buttonWithType:UIButtonTypeSystem];self.pushButton.frameCGRectMake(100,350,150,44);[self.pushButton setTitle:去输入文字forState:UIControlStateNormal];[self.pushButton addTarget:selfaction:selector(pushToSecond)forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:self.pushButton];// 注册通知监听[[NSNotificationCenter defaultCenter]addObserver:selfselector:selector(receiveText:)name:kTextFieldNotification object:nil];}[NSNotificationCenter defaultCenter] addObserver:self selector:selector(receiveText:) name:kTextFieldNotification object:nil的作用:这是向通知中心注册一个观察者的方法调用包含 4 个关键参数参数类型作用本例中的值observerid观察者对象谁要监听通知self当前对象selectorSEL收到通知后调用哪个方法selector(receiveText:)nameNSString监听哪个通知名称kTextFieldNotificationobjectid限定发送者对象过滤器nil不限定设置按钮事件, 创建视图控制器VCSecond 并且切换视图控制器// VCFirst.m-(void)pushToSecond{VCSecond*secondVC[[VCSecond alloc]init];[self.navigationController pushViewController:secondVC animated:YES];}接受通知的方法, 收到通知调用的方法, 将接受到的字符串赋值给laebl,显示出来// VCFirst.m// 接收通知的方法-(void)receiveText:(NSNotification*)notification{// 从 userInfo 中取出 textNSString*textnotification.userInfo[text];// 更新 Labelself.showLabel.text[NSString stringWithFormat:收到%,text];}在对象销毁的时候移除观察者, 否则会导致野指针// 移除观察者重要-(void)dealloc{[[NSNotificationCenter defaultCenter]removeObserver:self];}给VCSecond 定义属性inputTextField和属性 sendButton , 用来输入要传值的内容和切换视图控制器, 同时定义通知名称// VCSecond.m#importVCSecond.h// 通知名称必须和 First 中一致staticNSString*constkTextFieldNotificationTextFieldNotification;interfaceVCSecond()property(nonatomic,strong)UITextField*inputTextField;property(nonatomic,strong)UIButton*sendButton;end通知名称本质上是发送方和接收方之间约定的字符串 ,需要在两端保持一致, 才能实现通信因此,需要在需要发送和接受通知的视图控制器中都定义通知名称并且保持一致创建VCSecond 的inputField 和 sendButton// VCSecond.m-(void)viewDidLoad{[superviewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor[UIColor whiteColor];self.titleVCSecond;// 创建TextFieldself.inputTextField[[UITextField alloc]initWithFrame:CGRectMake(50,250,275,44)];// 输入框风格self.inputTextField.borderStyleUITextBorderStyleRoundedRect;self.inputTextField.placeholder请输入文字;// 编辑时显示清除按钮self.inputTextField.clearButtonModeUITextFieldViewModeWhileEditing;[self.view addSubview:_inputTextField];// 创建发送按钮self.sendButton[UIButton buttonWithType:UIButtonTypeSystem];self.sendButton.frameCGRectMake(100,320,150,44);[self.sendButton setTitle:发送并返回forState:UIControlStateNormal];self.sendButton.backgroundColor[UIColor systemBlueColor];[self.sendButton setTitleColor:[UIColor whiteColor]forState:UIControlStateNormal];[self.sendButton addTarget:selfaction:selector(sendAndBack)forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:_sendButton];}设置按钮事件: 发送通知 并 切换视图控制器// VCSecond.m-(void)sendAndBack{// 获取输入的文字NSString*strself.inputTextField.text;// 如果文字为空, 给定默认值if(str.length0){str空消息;}// 发送通知[[NSNotificationCenter defaultCenter]postNotificationName:kTextFieldNotification object:selfuserInfo:{text:str}];// 返回上一个界面[self.navigationController popViewControllerAnimated:YES];}发送通知:[[NSNotificationCenter defaultCenter] postNotificationName: kTextFieldNotification object: self userInfo: {text: str}];这段代码实现了发送通知的功能[NSNotificationCenter defaultCenter]获取通知中心的单例,[NSNotificationCenter defaultCenter]: 通知的名称object: 发送者userInfo: 携带的数据, 这里是一个字典, 可以传递多个数据, 例如:// 传递多个数据userInfo:{text:str,color:[UIColor redColor],number:100}通知发送的对象发送的消息是NSNotification对象,// postNotificationName:object:userInfo: 方法签名-(void)postNotificationName:(NSNotificationName)name object:(nullable id)object userInfo:(nullable NSDictionary*)userInfo;// 参数说明// name: 通知名称字符串// object: 发送者对象任意对象// userInfo: 数据字典NSDictionary在接收消息的时候通过 userInfo 属性取字典// 通过 userInfo 属性取字典-(void)handleNotification:(NSNotification*)notification{NSString*textnotification.userInfo[text];}

相关文章:

UI学习:通知传值

文章目录通知传值核心概念什么是通知中心三个核心角色通知的组成通知的生命周期举例讲解通知发送的对象通知传值 通知传值是 iOS 开发中一种解耦的传值方式,它允许没有直接引用关系的对象之间进行通信。 核心概念 什么是通知中心 NSNotificationCenter 是一个单…...

Go语言的runtime.MemProfile方法论

Go语言作为一门高效、简洁的编程语言,其内存管理机制一直备受开发者关注。在性能优化和内存泄漏排查中,runtime.MemProfile方法论是开发者不可或缺的工具之一。它能够帮助开发者深入理解程序的内存分配情况,从而精准定位问题。本文将从几个关…...

SAP EWM收货实操:从ERP采购单到仓库上架,手把手配置传输队列与避坑

SAP EWM收货实战:从ERP采购单到仓库上架的完整链路与高阶配置 当ERP系统中的采购订单转化为仓库货架上的实物库存,中间隐藏着一条由数十个技术节点串联而成的精密流水线。作为SAP EWM实施顾问,我曾目睹太多项目因传输队列配置失误导致收货流程…...

wireshark学习-ARP

ARP用于问对方的ip地址ping一下,抓包一下字面意思,谁是1.2这个地址?给我回复一下mac,我是1.11.2的地址在我这,我的mac地址是...言简意赅ping完了之后会建立一个缓存表,暂时保存ip地址与mac的映射关系&#…...

【本地部署】2026年Hermes Agent/OpenClaw7分钟超简易搭建流程

【本地部署】2026年Hermes Agent/OpenClaw7分钟超简易搭建流程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗?别再瞎折…...

2026年最新英语作文批改手机APP 帮学生快速提分的实用神器

一、行业深度痛点:为什么你用的作文批改APP没效果? 我们团队做了5年英语作文批改领域的技术测评,接触过近百款相关产品,发现行业共性痛点其实非常突出:对学生来说,要么APP只揪拼写语法错误,根本…...

齿轮典型故障精确建模与智能诊断【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)齿轮齿根裂纹与断齿精确动力学建模:基于…...

代码能力就是天然优势 程序员做智能体降维打击

文章目录前言2026年,智能体不是风口炒作,是程序员的时代级机会1.1 别再被焦虑裹挟,先搞懂智能体到底是什么1.2 数据不会骗人:智能体赛道的爆发,已经超出所有人想象1.3 为什么满大街都在聊智能体,真正能落地…...

齿轮箱监测数据管理与故障分析【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)多神经网络交叉注意力故障诊断模型:设计…...

迭代学习观测器T-S模糊系统故障估计【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码 (1)迭代学习自适应观测器设计: 针对T-S模…...

PipelinR:在Java中实现优雅的CRS架构

一、什么是 Q 饱和运算? 1. 核心痛点:普通运算的 “数值回绕” 普通算术运算(如 ADD/SUB)溢出时,数值会按补码规则 “回绕”,导致结果完全错误: 示例:int8_t 类型最大值 127 1 → 结…...

用了4款免费AI编程工具后,发现大多数人都选错了——附2026年最全避坑指南

AI Coding工具选型指南2026:GitHub Copilot Free / Cursor / Trae / Qwen Code 全维度横评与避坑实录 一、工具分类前置说明 在比较具体功能之前,必须明确工具形态差异。主流AI编程工具分别以"AI原生IDE"、"IDE插件集成"和"终端Agent"三种不…...

ARM异常处理与ESR寄存器深度解析

1. ARM异常处理机制概述 在ARMv8/v9架构中,异常处理是处理器响应硬件或软件事件的核心机制。当发生中断、系统调用、指令执行错误等事件时,处理器会暂停当前执行流,跳转到预设的异常向量表处执行对应的处理程序。异常处理涉及多个关键组件协同…...

Unity高性能割草游戏方案:用P3D Survivors Engine 打造爆款“类吸血鬼幸存者”游戏

一、插件简介 在近几年独立游戏市场中,以 Vampire Survivors 为代表的“幸存者类(Survivors-like)”游戏迅速爆火。这类游戏凭借爽快的割草体验、简单操作与高度可复玩性,成为移动端与PC端的热门赛道。 而 P3D: Survivors Engine …...

从半年报滑坡到单季盈利翻3倍!音飞储存的“盈利弹簧”暗藏什么玄机?

年报业绩骤降,一季报却迎来爆发式增长——音飞储存(603066.SH)的财报表现引发市场关注。2025年年报显示,音飞储存全年实现营业收入12.56亿元,同比下降13%;归母净利润3311万元,同比下滑34%。然而…...

Windows系统安装OpenClaw并使用wen千问接入飞书教程

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,age…...

CANoe Analysis功能区保姆级教程:从Trace窗口到Graphics,手把手教你高效分析总线数据

CANoe Analysis功能区实战指南:从数据捕获到深度分析的完整工作流 刚接触CANoe的工程师常常会陷入一个困境——面对Analysis功能区里密密麻麻的按钮和窗口,不知道从何入手。本文将带你以实际项目调试的视角,系统掌握从数据捕获到信号分析的全…...

别再全网乱搜了!RAS官方模板下载与IROS/ICRA投稿避坑全指南(附会议排名)

RAS官方模板下载与IROS/ICRA投稿全流程避坑指南 第一次投稿机器人领域顶会的研究者,往往会在格式规范、模板下载这些"技术细节"上耗费大量时间。去年我帮实验室三位学弟学妹检查投稿材料时,发现他们平均要花2-3天专门处理PDF兼容性问题——这原…...

Moneta Markets亿汇:美元走强日元宽幅震荡

近期外汇市场避险情绪明显升温,美元兑主要货币普遍走强,日元在日本央行政策决议公布后出现宽幅震荡。对此Moneta Markets亿汇认为,地缘风险推升避险需求,叠加美债收益率维持高位,美元的资金回流效应短期内仍是市场的核…...

别再只知道‘自动对焦’了!一文搞懂手机拍照里的PDAF、CDAF和激光对焦到底有啥区别

别再只知道‘自动对焦’了!一文搞懂手机拍照里的PDAF、CDAF和激光对焦到底有啥区别 每次看到手机厂商宣传"毫秒级对焦"或"夜景极速抓拍",你是否好奇这些功能背后究竟藏着什么黑科技?从千元机到旗舰机型,PDAF、…...

nli-MiniLM2-L6-H768镜像免配置实战:3分钟完成Windows/Mac/Linux三端部署

nli-MiniLM2-L6-H768镜像免配置实战:3分钟完成Windows/Mac/Linux三端部署 1. 工具简介 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类工具。它彻底改变了传统文本分类需要标注数据和训练模型的复杂流程&…...

基于WeDLM-7B-Base的智能文档处理系统:从OCR到信息提取

基于WeDLM-7B-Base的智能文档处理系统:从OCR到信息提取 1. 引言:文档处理的行业痛点 每天早晨,某银行信贷部门的小王都要面对堆积如山的贷款申请材料。这些PDF和扫描件里藏着客户的关键信息——收入证明上的数字、合同里的还款日期、身份证…...

AI岗位暴涨12倍成“香饽饽”!2026求职市场回温,高薪高要求成主流

新经济行业,指利⽤互联⽹、⼤数据、云计算、⼈⼯智能等技术,诞⽣出新产品、新业态、新商业模式的⾏业。近日,脉脉高聘人才智库发布《2026年1-2月中高端人才求职招聘洞察》。报告显示,2026年1-2月,新经济行业新发岗位量…...

匿名管道实例

说明:这段代码实现了**父子进程通过管道进行进程间通信(IPC)**的功能 核心功能流程: 参数验证 - 检查是否提供了命令行参数 创建管道 - 使用 pipe() 创建一条匿名管道 pipefd[0] 用于读取pipefd[1] 用于写入 创建子进程 - 使用 fork() 创建子进程 子…...

公有云环境部署与网站设置

2026 年,公有云已成为企业与个人网站部署的绝对主流选择,彻底替代了传统 IDC 的主导地位。相比传统部署模式,公有云凭借弹性伸缩、免底层运维、全栈能力集成、低成本试错等核心优势,完美覆盖了从个人博客、企业官网,到…...

C++内存分配器怎么选?深度对比JeMalloc、TCMalloc和glibc的适用场景

C内存分配器选型指南:JeMalloc、TCMalloc与glibc的深度场景化对比 当你在技术评审会上听到"内存分配器性能影响系统吞吐量30%"的汇报时,是否意识到这背后是算法选择与场景匹配的艺术?现代C应用的内存分配已不再是简单的new/delete封…...

ARM PMU性能监控单元原理与实战应用

1. ARM PMU性能监控单元概述性能监控单元(Performance Monitoring Unit, PMU)是现代处理器中用于硬件级性能分析的关键组件。在ARM架构中,PMUv3规范定义了一套完整的性能监控机制,通过专用寄存器组和硬件计数器实现对处理器运行时行为的精确测量。作为长…...

Actor-Critic算法实战:从QAC到A2C,用PyTorch一步步实现策略梯度与价值评估的结合

Actor-Critic算法实战:从QAC到A2C的PyTorch实现指南 在强化学习领域,Actor-Critic算法因其结合了策略梯度与价值评估的双重优势而备受关注。本文将带您从零开始,用PyTorch实现从基础的QAC到进阶的A2C算法,解决实际编码中的关键问题…...

Elecrow一站式电子制造服务解析与创客支持

1. Elecrow:为创客和初创企业提供一站式电子制造解决方案在深圳这座硬件创业的热土上,Elecrow自2014年成立以来,已经从一个两人创始团队成长为拥有140多名员工的综合性电子制造服务商。作为一家集研发、生产、销售于一体的企业,El…...

ARM架构FAR寄存器解析:异常处理与虚拟化关键机制

1. ARM架构异常处理机制概述在ARMv8/ARMv9架构中,异常处理机制是系统可靠性和安全性的基石。当处理器执行过程中遇到无法继续正常执行的状况时(如非法内存访问、未对齐访问、指令执行错误等),会触发异常并跳转到预先定义的异常处理…...