三種傳值:屬性傳值 block傳值 以及 代理傳值 (這裏我用前面的頁面和後面的)來表示兩個控制器:LoginViewController和RegisterViewControllerspa
創建兩個控制器:LoginViewController(loginViewController)和RegisterViewController(registerViewController),代理
1.在LoginViewController上創建一個TextField(loginTextField)和一個UIButton(loginButton), loginTextField指向.h文件, 創建一個屬性, loginButton指向registerViewController類型是show;code
2.rregisterViewController中創建一個TextField(registerTextField) 兩個button (blockButton, delegateButton), registerTextField指向.h文件, 創建一個屬性, 兩個button分別指向.m文件創建本身的方法sendValWithBlock和sendValWithDelegate;對象
1.屬性傳值blog
在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輸入框裏面的值)it
而後我再registerViewController裏面的viewdidload方法裏面接收: _registerTextField.text = _value;io
2.block傳值class
block傳值的原理(我的看法):首先你要明白的是兩個控制器的生命週期, 第一個頁面也就是登錄頁面, 他的生命週期是整個過程, 而登錄頁面的生命週期是在咱們點擊第一個頁面的登錄按鈕開始, 到第二個頁面退出結束的. 而咱們把block有聲明 實現和調用三個階段, 咱們把它的三個階段分開了, 這是基於block一個特性:!!!!block的內部在實現的時候是不運行的, 只有在調用的時候纔會運行. (沒時間了)==吧原理