iOS (页面间传值)协议和代理的使用 protocol delegate

iOS开发:Protocol协议以及委托代理传值 由于OC不支持多继承,所以在很多时候都是要用Protocol协议来代替。Protocol协议只能定义公用的一套接口,不能提供具体的实现方法。也就是说只告诉需要做什么,但具体怎么实现需要另外实现操作。        当一个类要使用某一个Protocol协议时,都必须要遵守协议。如果有些必须要实现的方法,你没有实现,编译器就会报警告来提醒你没有遵守未实现的协议。这仅仅是警告而不是报错,也就是说你 阅读详情

最近搜关于协议和代理使用相关内容的时候发现雷同太多,这篇是很早前整理的我已经记不清是自己修改过了的,还是直接在往上复制下来的,不过感觉介绍还是蛮细致的

1、首先定义个一委托UIViewPassValueDelegate用来传递值

1. @protocol UIViewPassValueDelegate 
2. - (void)passValue:(NSString *)value; 
3. @end 

这个protocol 就是用来传递值

2、在窗口1的头文件里,声明delegate

1. #import <UIKit/UIKit.h> 
2. #import "UIViewPassValueDelegate.h" 
3. @interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate> 
4. {  
5.     UITextField *_value; 
6. }  
7. @property(nonatomic, retain) IBOutlet UITextField *value; 
8. - (IBAction)buttonClick:(id)sender; 
9. @end 

并实现这个委托

1. - (void)passValue:(NSString *)value 
2. {  
3.   self.value.text = value;  
4.     NSLog(@"the get value is %@", value); 
5. } 

button的Click方法,打开窗口2,并将窗口2的delegate实现方法指向窗口1。

1. - (IBAction)buttonClick:(id)sender 
2. {  
3.     ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]]; 
4.     valueView.delegate = self;  
5.     [self setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
6.     [self presentModalViewController:valueView animated:YES]; 
7. } 


第二个窗口的实现

.h 头文件

1. #import <UIKit/UIKit.h> 
2. #import "UIViewPassValueDelegate.h" 
3.  
4. @interface ValueInputView : UIViewController { 
5.  
6.     NSObject<UIViewPassValueDelegate> * delegate;  
7.     UITextField *_value; 
8. }  
9. @property(nonatomic, retain)IBOutlet UITextField *value; 
10.@property(nonatomic, retain) NSObject<UIViewPassValueDelegate> * delegate;  
11.- (IBAction)buttonClick:(id)sender; 
12.@end 

.m实现文件

1. #import "ValueInputView.h" 
2. @implementation ValueInputView 
3. @synthesize delegate; 
4. @synthesize value = _value;  
5. - (void)dealloc { 
6.     [self.value release]; 
7.     [super dealloc]; 
8. }  
9.  
10.- (IBAction)buttonClick:(id)sender 
11.{  
12.    [delegate passValue:self.value.text]; 
13.    NSLog(@"self.value.text is%@", self.value.text); 
14.    [self dismissModalViewControllerAnimated:YES];     
15.    
16.}  
17.- (void)didReceiveMemoryWarning { 
18.    // Releases the view if it doesn't have a superview. 
19.    [super didReceiveMemoryWarning]; 
20.     
21.    // Release any cached data, images, etc. that aren't in use. 
22.}  
23. 
24.- (void)viewDidUnload { 
25.    [super viewDidUnload]; 
26.    // Release any retained subviews of the main view. 
27.    // e.g. self.myOutlet = nil;  
28.}  
29. 
30./*  
31.// Only override drawRect: if you perform custom drawing. 
32.// An empty implementation adversely affects performance during animation. 
33.- (void)drawRect:(CGRect)rect { 
34.    // Drawing code. 
35.}  
36.*/  
37.@end 


 

RxSwiftProject:迅捷RxSwift + Moya + MVVM RxSwift + Moya + MVVM 项目使用了QMUI框架 ,使用时的配置: 查看“如何使用配置表”一栏 如果报错 "No type or protocol named 'QMUIConfigurationTemplateProtocol'", 请在QMUIConfigurationTemplate.h中#import <QMUIKit> 立即下载

相关推荐

c#窗体应用(.NET Framework)项目对Yaml文件进行写入与读取,Yaml数据转换成json

用到的技术与版本准备工作Yaml数据在C#中进行定义对Yaml文件的读取与写入代码的添加窗体控件控制操作写入数据到Yaml文件读取Yaml文件数据Yaml数据转换成json改进——对yaml文件读取时根据yaml文件中的键进行获取,对c#中怎么取名字无关yaml文件中多个数据读取遇到的问题总结的小点参考的文章在对Yaml文件进行读取前,先将Yaml文件中的数据结构在c#中进行定义,以便后面更好的读取。这里对这四个类型进行举例(这里为了想看看这四个类型到Yaml文件的格式是什么样子的)

永远年轻 1587

ReactNative进阶(二十三)error: no type or protocol named ‘RCTBridgeModule’问题修复

Jenkins初步怀疑是依赖包缺失导致,通过将之前的备份依赖包替换至现有项目中,问题得以解决😂。

IT全栈 华强工作室 776

【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题) 实验报告 附代码、数据集

【内附代码与数据集】【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题)

m0_74268508的博客 1293

iOS 使用协议委托遇到的一个小问题

今天做了个项目,里面使用到相同布局的多个TableView,然后就想,自定义UITableViewCell,再加到各个UITableView上。在cell上加了几个按钮,按钮的实现方法要写在UITableView所在的控制器里,这里需要使用协议,将按钮要实现的方法写到协议里,控制器遵守协议,实现按钮的方法。但是总是报错,研究了好长时间,才发现问题所在。原因是:     [self.wish add

bluesky903的专栏 695

【CTF-misc】java盲水印BlindWatermark工具使用

​ 盲水印是一种肉眼不可见的水印方式,对图片资源使用图片盲水印或者文字水印,借此避免数字媒体未经授权的复制和拷贝,可通过对原图进行解码操作,得到水印图来证明版权归属。 题目来源:NewStarCTF 2023 公开赛道 WEEK2|MISC:Jvav

qq_39972370的博客 6447

C# chart以鼠标所在位置为中心进行缩放

以前都用labview做一些软件,但给出去总是会遇到版本,安装包过大等一些问题,于是想自学C#,记录一下使用过程中遇到的一些问题和解决措施,便于日后回顾。 在这个项目中需要绘制折线图,由于数据比较大,需要对图表进行缩放操作,以鼠标为中心对图表进行缩放,在网上查找了一些资料没找到我想要的,于是自己想了一个解决方案,可以基本实现,但略显繁琐,由于刚开始学习C#,对一些操作不太了解,若以后遇...

fei的博客 6363

ios使用theos tweak logify.pl自动hook .h头文件中所有的方法

文章目录配置theos环境变量手动在tweek里打印一个函数的信息使用logify.pl自动生成一个.h文件中的所有函数的打印信息 配置theos环境变量 theos文件夹下的bin,下有一个logify.pl 把这个 theos/bin添加到系统环境变量里,就可以在任意位置使用这个pl文件 执行命令 open ~/.zshrc 添加一行: export PATH="theos的路径/theos/bin:$PATH" 然后让环境变量生效 source ~/.zshrc 手动在tweek里打印一个函数的

小手琴师的博客 1453

GAN网络(论文阅读):Generative Adversarial Nets

当判别器效果比较好时,D(G(z))值为0,则log(1-D(G(z)))值为0,当判别器效果不好,会输出一个大于0 的数,则log(1-D(G(z)))值就为一个负数,在极端情况下,会得到负无穷大,此时判别失误。在价值函数的第二项中存在问题,在早期G比较弱的时,生成的数据和真实数据相差很大,D就容易训练的比较好,很容易区分,就会导致log(1-D(G(z)))变成0 ,这样很难求梯度来优化G,所以更新G时,将优化函数改为log(D(G(z)))。最终使G赢,即G生成的数据D判别不出来。

m0_54248968的博客 2293

iOS学习笔记-----使用代理(Delegate)的页面传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议。注意,我这里说的是警告,而不

Maybe_Chen的博客 2313

YOLOv11改进策略【Conv和Transformer】| IJCAI 2024 利用FreqFormer中的SFA 空间 - 频率注意力和CTA 通道转置注意力 二次改进C3k2

在FreqFormer模型中,SFA(Spatial-Frequency Attention)和CTA(Channel Transposed Attention)模块是关键组成部分,它们针对传统Transformer在图像超分辨率任务中的不足而设计,旨在更好地恢复高频细节,提升模型性能。

Limiiiing的博客 759

RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

weixin_49303682的博客 349

iOS-Protocol(协议)和Delegate(代理)

1.基础原理 我们平时说的代理其实分为Protocol(协议)和Delegate(代理)两个部分。 协议不是代理,代理不是协议。 协议是多个类之间协商的一个公共接口,这个公共接口提供一系列方法的声明给其他类使用。 代理是协议的应用机制。 代理通俗来说就是我自己不方便去做的一些事(协议里定义的方法),我需要委托其他人来做这些事。我就是委托方,对方就是被委托方。 举个栗子: 一个View...

SunSatan的博客 637

tsmc12:via0的spacing问题(Via0.S.1)

12nm有个via0 grid的概念,除了普通fill外,基本都有via0这一层,这一层需要与via0 grid对齐。手动调整cell的位置比较容易出这个drc,比如修m0po max length drc时。解决方法1: 替换EEQV类型cell,这种类型是专门为了修via0 Grid问题存在的。更多学习内容请关注「拾陆楼」知识星球。解决方法2: 翻转或移动。

m0_61544122的博客 1115

[IOS]Protocol协议及委托代理(Delegate)传值-用代码寻找storyboard相应视图

Protocol协议及委托代理(Delegate)传值前言:因为Swift是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。理解当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来

stary_yan的博客 1333

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IOS开发-Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。   当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议。注意,我这里说的

zhuobi0的专栏 458

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS swift 代理 delegate protocol 和 通知(NSNotification)

文章目录参考博客: 参考博客: iOS swift 代理协议

baidu_40537062的博客 1246

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

UI学习: 多界面传值的正向传值(属性传值)和反向传值(代理传值)

/ VCSecond.h # import < UIKit / UIKit . h > // 第一步:定义协议 @protocol VCSecondDelegate < NSObject > // 协议方法:B界面需要传值时调用这个方法 -(void) vcSecond :(id) vcSecond didSendText :(NSString *) text;

for_ever_love__的博客 228

ios delegate传值

楔子 iOS里不同View之间传值有多种方式,常用的一种是delegate。具体如下: 概述 delegate典型应用场景如下:由OneView进入TwoView,在TwoView里输入值后,传回到OneView中。工程文件结构如下 步骤 1.定义delegate Xcode-File-New-File选择Objective-c File,点击next,在File Type:中选择Protocol,next后即可创建一个delegate。 #import <Foundation/Foundation

灿烂的博客 1568

iOS开发-Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。 当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议。注意,我这里说的是

Keep_Moving31038的博客 392

protocol(协议)、delegate(代理)

protocol(协议)、delegate(代理) 一、protocol(协议) 1.概念:把多个类中的某些共同属性、方法抽象到一个类中,但这些属性、方法在不同的类中有不同的实现,相当于Java中的接口。协议只有声明,没有实现。使用者只需要遵守这个协议 ,就可以得到这个协议里面声明的方法 2.创建一个协议 如Test.h #imp...

Jian_Ze的博客 282

【IOS】委托(delegate)和协议(protocol)

iOS的委托模式之前也接触过,总觉得自己理解的不够透彻,使用时磕磕绊绊,今天做一个有关协议和委托模式的总结 协议(protocol) 由于Objective_C的类不支持多继承,而类在实现时很多相似的方法,所以我们把某个类应该实现的一系列方法定义在一个叫协议(Protocol)的特性里面,若某类遵循了此协议(Protocol),就可以实现该协议(Protocol)里包含的方法,但并不一定要全部实现Protocol里声明的方法,其方法的实现一般都是可选的(@optional),若检查@optional的方法是

YUANdeboke的博客 2739

UI学习: 反向传值(代理传值)深入学习

/ VCSecond.h # import < UIKit / UIKit . h > // 第一步:定义协议 @protocol VCSecondDelegate < NSObject > // 协议方法:B界面需要传值时调用这个方法 -(void) vcSecond :(id) vcSecond didSendText :(NSString *) text;@end。

for_ever_love__的博客 437

协议(Protocol) 和代理(Delegate)

1、概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。 代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。 block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起...

weixin_30323961的博客 280
上一篇: 我要做哪一只苹果虫?
下一篇: Objective-C的运行时机制,反射机制
明理明智
博客等级 码龄15年 7粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值