首页 > 代码库 > storyboard中的三种传值

storyboard中的三种传值

三种传值:属性传值 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 = http://www.mamicode.com/^(NSString * obj){13         _loginTextField.text = obj;14     };15     16     // 3.代理传值17     registerVC.delegate = self;18     19     20 }21 #pragma mark 实现代理方法22 - (void)sendValueWithDelegate:(id)id23 {24     self.loginTextField.text = id;25 }

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

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

2.block传值

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

  

  

storyboard中的三种传值