三种传值:属性传值 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方法中的代码是
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
RegisterViewController* registerVC = segue.destinationViewController; // 1.属性传值
NSString* str = self.loginTextField.text;
if ([registerVC respondsToSelector:@selector(setValue:)]) {
[registerVC setValue:str forKey:@"value"];
} // 2.block传值
registerVC.sendValue = ^(NSString * obj){
_loginTextField.text = obj;
}; // 3.代理传值
registerVC.delegate = self; }
#pragma mark 实现代理方法
- (void)sendValueWithDelegate:(id)id
{
self.loginTextField.text = id;
}
上面是三种传值方法的代码, 我们现在只看第一种, 我们初始化一个registerViewController对象, 来对他的value属性进行赋值, 然后再RegisterViewController中的registerTextField中显示他所传的值(这里我传的是loginTextField输入框里面的值)
然后我再registerViewController里面的viewdidload方法里面接收: _registerTextField.text = _value;
2.block传值
block传值的原理(个人见解):首先你要明白的是两个控制器的生命周期, 第一个页面也就是登陆页面, 他的生命周期是整个过程, 而登陆页面的生命周期是在我们点击第一个页面的登陆按钮开始, 到第二个页面退出结束的. 而我们把block有声明 实现和调用三个阶段, 我们把它的三个阶段分开了, 这是基于block一个特性:!!!!block的内部在实现的时候是不运行的, 只有在调用的时候才会运行. (没时间了)==吧