
iOS 代理反向传值
发布日期:2021-05-09 04:04:00
浏览次数:17
分类:博客文章
本文共 1926 字,大约阅读时间需要 6 分钟。
在上篇博客 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用。
假如我们有一个需求如下:界面A上面有一个button、一个label。从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示。这是一个典型的反向传值的例子。这个例子的核心是:“在界面B的输入框中输入字符串,在界面A的label上显示”。也就是说:“界面B委托界面A显示字符串,页面A是界面B的代理”。委托方向代理方反向传值。
那么我们该怎么用代理设计模式来实现这个需求呢?
在程序中:
1.委托需要做的工作有:
1.1定义协议与方法
1.2声明委托变量
1.3设置代理
1.4通过委托变量调用委托方法
2.代理需要做的工作有:
2.1遵循协议
2.2实现委托方法
在BViewController.h中:
//定义协议与方法@protocol DeliverDetegate- (void)setValue:(NSString *)string;@end@interface BViewController : UIViewController//声明委托变量@property (weak,nonatomic) id B_Delegate;@end
在BViewController.m中:
@interface BViewController ()@property (strong, nonatomic) IBOutlet UITextField *DeliverText;@end
- (IBAction)DeliverAction:(id)sender { //通过委托变量调用委托方法 //输入则显示输入的字符串,未输入显示“未填写” if (![_DeliverText.text isEqualToString:@""]) { NSLog(@"B向A发送数据%@",_DeliverText.text); //判断代理中的方法是否被实现,避免未被实现代理的程序崩溃 if ([self.B_Delegate respondsToSelector:@selector(setValue:)]) { [self.B_Delegate setValue:_DeliverText.text]; } } else { NSLog(@"B向A发送数据%@",@"未填写"); //判断代理中的方法是否被实现,避免未被实现代理的程序崩溃 if ([self.B_Delegate respondsToSelector:@selector(setValue:)]) { [self.B_Delegate setValue:@"未填写"]; } } [self.navigationController popViewControllerAnimated:YES];}
在AViewController.m中
#import "AViewController.h"#import "BViewController.h"@interface AViewController ()@property (strong, nonatomic) IBOutlet UILabel *TextLabel;@end
- (IBAction)ReceiveAction:(id)sender { //遵循协议 BViewController*BVC = [[BViewController alloc]init]; BVC.B_Delegate = self; [self.navigationController pushViewController:BVC animated:YES];}
//实现委托方法,即实现的setValue方法- (void)setValue:(NSString *)string{ NSLog(@"A接收到B数据%@",string); _TextLabel.text = string;}
最后的效果图如下:
输出日志:
由于本文用的是XIB,省略了部分UI细节,附上本文的代码链接:。
哪里写的不好,望评论指点。谢过~
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月28日 02时42分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Centos7查看外网ip,yum安装的curl无法正常使用
2019-03-06
TX锁处理
2019-03-06
DG_数据文件转换参数测试
2019-03-06
exp迁移测试库10.2.0.5
2019-03-06
使用UTF8字符集存储中文生僻字
2019-03-06
去除空格函数trim
2019-03-06
NFS配置
2019-03-06
11.2.0.4单实例静默安装
2019-03-06
大表添加一个字段需求
2019-03-06
SQL*Net break/reset to client (%)等待事件
2019-03-06
数据泵使用NETWORK_LINK不落地导入数据
2019-03-06
19cRAC增删节点
2019-03-06
create index or add online区别
2019-03-06
实验之-----------修改oracle实例名
2019-03-06
控制文件
2019-03-06