iOS block在不同介面的回撥傳值
阿新 • • 發佈:2019-02-04
一、二級介面向一級介面的回撥傳值
首先,在二級介面的.h檔案定義一個block的屬性,方便傳值
/**
* 將block定義為屬性
*/
@property(nonatomic,copy)void(^returnString)(NSString * str);
然後在一級介面的.m檔案呼叫
最後在二級介面的.m介面實現回撥-(void)btnclicked{ secondViewController * second = [[secondViewController alloc] init]; second.returnString = ^(NSString * str){ NSLog(@"我是第一個介面的回撥---%@",str); }; [self.navigationController pushViewController:second animated:YES]; }
-(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可以供大家參考一下
備註:歡迎指正!