iOS 代理反向传值

举报
风吹稻花香 发表于 2021/06/05 01:41:30 2021/06/05
【摘要】 iOS 代理反向传值   在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用。 假如我们有一个需求如下:界面A上面有一个button、一个label。从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示。这是一个典型的反向传值的例子。这个例子的核心是:“在界面B的输入框中输入字符串,在界面...

iOS 代理反向传值

 

在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用。

假如我们有一个需求如下:界面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 <NSObject>

- (void)setValue:(NSString *)string;

@end

@interface BViewController : UIViewController

//声明委托变量
@property (weak,nonatomic) id<DeliverDetegate>B_Delegate;

@end
复制代码

 

在BViewController.m中:

@interface BViewController ()<UITextFieldDelegate>

@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 ()<DeliverDetegate>

@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细节,附上本文的代码链接:源码

原文:http://www.cnblogs.com/jukaiit/p/5021730.html?utm_source=tuicool&utm_medium=referral

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/56481262

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。