iOS開發傳值方式

1、屬性傳值(正向傳值)

//實例化一個新的控制器ViewControllerB
    ViewControllerB *ctl = [ViewControllerB new];
    //正向傳值,經過成員變量
    ctl.receiveStr = sender.titleLabel.text;
    
    //切換
    /*
        參數1:切換的控制器對象
        參數2:是否須要動畫
        參數3:回調block,暫時不使用
     */
    [self presentViewController:ctl animated:YES completion:nil];dom

一般用於正向傳值,適用於A和B相互具備必定關聯性。不能用於隔頁面傳值。並且,須要傳值的屬性不能是私有屬性,也就是說在.h中聲明出來的屬性才能夠傳值。動畫

二 block傳值

使用場景:
經常使用於回調,簡單的說就是B有一個按鈕,當按鈕被點擊時把點擊事件傳傳給A,並傳一個字符串"B被點了"。ui

 

//首先在B控制器中聲明一個block,參數是一個字符串 @property (nonatomic,copy) void(^block)(NSString *title);
//一樣在B控制器,在按鈕點擊觸發的方法裏執行block - (void)buttonClick:(UIButton *)sender {  //改變ViewControllerA上UILabel顯示的內容
    _block(sender.titleLabel.text);

    //關閉
    [self dismissViewControllerAnimated:YES completion:nil]; }
  
    ViewControllerB *ctl = [ViewControllerB new];

    
    //給ctl中的成員block賦值實體
    ctl.block = ^(NSString *deliverStr){
        //給UILabel上的text賦值   
label.text = deliverStr;  
    };
    
    //切換到ViewControllerB
    [self presentViewController:ctl animated:YES completion:nil];

一樣的Block在這裏做爲屬性存在,同屬性傳值同樣,須要兩個控制器間具備必定關聯性。不能跨頁面傳值。
若是必定要跨,就要像接力賽同樣,A傳給B,B傳給C這樣
//如今回到A控制器,在推出B的時候給B的block賦值,簡單的說,就是在收到B的消息時,想要作什麼事 BController *B = [BController new]; B.block = ^(NSString *title) { //do someThing A.title = title; }; [A.navigationController pushViewController:B animated:YES];


做者:Adoma
連接:https://www.jianshu.com/p/51153323c8bf
來源:簡書
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
 
//如今回到A控制器,在推出B的時候給B的block賦值,簡單的說,就是在收到B的消息時,想要作什麼事 BController *B = [BController new]; B.block = ^(NSString *title) { //do someThing A.title = title; }; [A.navigationController pushViewController:B animated:YES];
做者:Adoma 連接:https://www.jianshu.com/p/51153323c8bf 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索