storyboard中的三种传值

本文详细介绍了iOS开发中通过属性、block和代理方式实现值传递的三种方法,并提供了实例代码说明。

三种传值:属性传值 block传值 以及 代理传值 (这里我用前面的页面和后面的)来表示两个控制器:LoginViewController和RegisterViewController

建立两个控制器:LoginViewController(loginViewController)和RegisterViewController(registerViewController),

  1.在LoginViewController上建立一个TextField(loginTextField)和一个UIButton(loginButton), loginTextField指向.h文件, 建立一个属性,  loginButton指向registerViewController类型是show;

  2.rregisterViewController中建立一个TextField(registerTextField) 两个button (blockButton, delegateButton),  registerTextField指向.h文件, 建立一个属性, 两个button分别指向.m文件建立自己的方法sendValWithBlock和sendValWithDelegate;

1.属性传值

  在registerViewController.h中定义一个value属性, 用来传值. 在LoginViewController中的prepareForSegue方法中的代码是  

 1 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 2 {
 3     RegisterViewController* registerVC =  segue.destinationViewController;
 4     
 5     // 1.属性传值
 6     NSString* str = self.loginTextField.text;
 7     if ([registerVC respondsToSelector:@selector(setValue:)]) {
 8         [registerVC setValue:str forKey:@"value"];
 9     }
10     
11     // 2.block传值
12     registerVC.sendValue = ^(NSString * obj){
13         _loginTextField.text = obj;
14     };
15     
16     // 3.代理传值
17     registerVC.delegate = self;
18     
19     
20 }
21 #pragma mark 实现代理方法
22 - (void)sendValueWithDelegate:(id)id
23 {
24     self.loginTextField.text = id;
25 }

  上面是三种传值方法的代码, 我们现在只看第一种, 我们初始化一个registerViewController对象, 来对他的value属性进行赋值, 然后再RegisterViewController中的registerTextField中显示他所传的值(这里我传的是loginTextField输入框里面的值)

  然后我再registerViewController里面的viewdidload方法里面接收: _registerTextField.text = _value;

2.block传值

block传值的原理(个人见解):首先你要明白的是两个控制器的生命周期, 第一个页面也就是登陆页面, 他的生命周期是整个过程, 而登陆页面的生命周期是在我们点击第一个页面的登陆按钮开始, 到第二个页面退出结束的. 而我们把block有声明 实现和调用三个阶段, 我们把它的三个阶段分开了, 这是基于block一个特性:!!!!block的内部在实现的时候是不运行的, 只有在调用的时候才会运行. (没时间了)==吧

  

  

转载于:https://www.cnblogs.com/lovelydark/p/4175443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值