1. 程式人生 > >iOS block在不同介面的回撥傳值

iOS block在不同介面的回撥傳值

一、二級介面向一級介面的回撥傳值

首先,在二級介面的.h檔案定義一個block的屬性,方便傳值

/**
 *  將block定義為屬性
 */

@property(nonatomic,copy)void(^returnString)(NSString * str);

然後在一級介面的.m檔案呼叫
-(void)btnclicked{
    
    secondViewController * second = [[secondViewController alloc] init];
    
    second.returnString = ^(NSString * str){
        NSLog(@"我是第一個介面的回撥---%@",str);
    };
    
    [self.navigationController pushViewController:second animated:YES];
    
}
最後在二級介面的.m介面實現回撥
-(void)btnclicked{
    
    if (self.returnString) {
        self.returnString(@"第二個介面穿過來的值");
    }
    
    [self.navigationController popViewControllerAnimated:YES];
}

回撥結果如下


二、三級介面向一級介面傳值

首先在二級介面和三級介面的.h檔案中定義一個block的屬性

/**
 *  將block定義為屬性
 */

@property(nonatomic,copy)void(^returnString)(NSString * str);

然後在二級介面跳轉到三級介面的方法中這樣傳值

-(void)nextBtnclicked{
    
    thirdViewController * third = [[thirdViewController alloc] init];
    third.returnString = self.returnString;
    
    third.returnString = ^(NSString * str){
        
        NSLog(@"我是第二個介面的回撥---%@",str);
        
        /**
         *  此處是實現值的連續傳遞 如果不實現的話當前控制不能將值傳遞給上一個介面
         */
        
        self.returnString(str);
        
    };
    
    [self.navigationController pushViewController:third animated:YES];

}

最後回到的結果如下


下面是我自己寫的一個小demo可以供大家參考一下 

備註:歡迎指正!