M牛C原创博客——MVC 模式中正向传值、反向传值
多vc之间的传值
1)正向传值
当AVC推出BVC时,a给b传值叫做正向传值
2)正向传值实现步骤
step1:bvc要提供一个公开的属性
//公开一个属性,用于接收其他类出入的字符串
@property(nonatomic,copy)NSString *message;
step2:avc在推出bcc之前,为bvc公开的属性赋值
//1.创建要推出的bvc的实例
BViewController *bvc = [[BViewController alloc]initWithNibName:@"BViewController" bundle:nil];
//2.为bvc公开的属性赋值
bvc.message = self.textField.text;
//3.推出
[self presentViewController:bvc animated:YES completion:nil];
step3:bvc在一个合适的时机,显示avc传来的值
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.label.text = self.message;
}
3)反向传值(回传)
AVC推出BVC,在b返回到a的过程中,b给a传值叫做反向传值
解决方案一:
step1:为avc增加用于接收返回的数据的属性
//公开一个属性,用于接收B回传回来的值
@property(nonatomic,copy)NSString *backMessage;
step2:为bvc增加用于接收avc引用的属性
//公开一个属性,用来存储avc的引用
@property(nonatomic,strong)AViewController *avc;
step3:avc在推出bvc之前,将自己赋值给bvc公开的属性
#import "AViewController.h"
#import "BViewController.h"
@interface AViewController ()
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation AViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.label.text = self.backMessage;
}
- (IBAction)gotoBVC:(id)sender {
BViewController *bvc = [[BViewController alloc]initWithNibName:@"BViewController" bundle:nil];
//avc将自己的引用传给了bvc
bvc.avc = self;
[self presentViewController:bvc animated:YES completion:nil];
}
step4:bvc在dismiss之前,将文本框的值赋值给存储的avc
step5:avc在viewWillAppear中显示回传的值
@interface BViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end
@implementation BViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (IBAction)gobackAVC:(id)sender {
self.avc.backMessage = self.textField.text;
[self dismissViewControllerAnimated:YES completion:nil];
}
解决方案二:委托
/*
1.定义协议
1)协议命名:类名+Delegate
2) 方法的命名:尽量体现发消息的时机
3)方法的参数:第一个参数一定是委托方自己,后面的参数可以为委托方发给代理方的辅助信息
2.定义一个属性,用于存储代理方的引用
3.在合适的时机给代理方发消息
*/
/*
在回传值的过程中,InputViewController为委托方,AViewController为代理方
1.遵守协议
2.实现方法
3.设置自己为代理方
*/
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。