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.设置自己为代理方

*/


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。