MVC 模式中正向传值、反向传值

多vc之间的传值

1)正向传值

当AVC推出BVC时,a给b传值叫做正向传值


2)正向传值实现步骤

step1:bvc要提供一个公开的属性

//公开一个属性,用于接收其他类出入的字符串

@property(nonatomic,copy)NSString *message;


step2:avc在推出bcc之前,为bvc公开的属性赋值

//1.创建要推出的bvc的实例

    BViewController *bvc = [[BViewControlleralloc]initWithNibName:@"BViewController"bundle:nil];

    //2.bvc公开的属性赋值

    bvc.message =self.textField.text;

    //3.推出

    [selfpresentViewController:bvc animated:YEScompletion:nil];


step3:bvc在一个合适的时机,显示avc传来的值

- (void)viewWillAppear:(BOOL)animated{

    [superviewWillAppear: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"


@interfaceAViewController ()

@property (weak,nonatomic) IBOutletUILabel *label;


@end


@implementation AViewController


- (void)viewDidLoad

{

    [superviewDidLoad];

}


- (void)viewWillAppear:(BOOL)animated{

    [superviewWillAppear:animated];

    self.label.text =self.backMessage;

}




- (IBAction)gotoBVC:(id)sender {

    BViewController *bvc = [[BViewControlleralloc]initWithNibName:@"BViewController"bundle:nil];

    //avc将自己的引用传给了bvc

    bvc.avc =self;

    [selfpresentViewController:bvc animated:YEScompletion:nil];

}


step4:bvc在dismiss之前,将文本框的值赋值给存储的avc

step5:avc在viewWillAppear中显示回传的值


@interfaceBViewController ()

@property (weak,nonatomic) IBOutletUITextField *textField;


@end


@implementation BViewController

- (void)viewDidLoad

{

    [superviewDidLoad];

   

}


- (IBAction)gobackAVC:(id)sender {

    self.avc.backMessage =self.textField.text;

    [selfdismissViewControllerAnimated:YEScompletion:nil];

}




解决方案二:委托

/*

1.定义协议

    1)协议命名:类名+Delegate

    2)方法的命名:尽量体现发消息的时机

    3)方法的参数:第一个参数一定是委托方自己,后面的参数可以为委托方发给代理方的辅助信息

2.定义一个属性,用于存储代理方的引用

3.在合适的时机给代理方发消息

*/

/*

在回传值的过程中,InputViewController为委托方,AViewController为代理方

1.遵守协议

2.实现方法

3.设置自己为代理方

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值