storyboard中的三種傳值

三種傳值:屬性傳值 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的內部在實現的時候是不運行的, 只有在調用的時候纔會運行. (沒時間了)==吧原理

相關文章
相關標籤/搜索