最近又开始 研究 block 这个东西,自己也在试一试自己动手编写 实现 将B界面的输入的文字 回调给A界面。首先要思考的是 在那个界面 定义回调函数,先A到B界面,B输入一段文字,返回到A, A得到 文字。如果我们使用委托代理的方法,可以知道 是在 A界面写委托方法,在B界面声明一个委托属性。B界面执行委托方法,传参。A委托方法就会执行相应的操作。 我也发现 用block的思路和 委托代理是一样的
看代码:
BlockViewController *viewController = [[BlockViewControlleralloc]init];
//定义回调函数的内容 当执行blokc 方法的时候就会执行 里面的方法
viewController.showBlock = ^(NSString *str){
showLabel.text = str;
};
//跳入B界面
[selfpresentViewController:viewControlleranimated:YEScompletion:nil];
//在B界面声明一个 block
@interface BlockViewController :UIViewController
@property (nonatomic,copy)void(^showBlock)(NSString* );
//void(^showBlock)(NSString* );
@end
//在.m文件里面执行
- (IBAction)returnButtonAction:(id)sender {
self.showBlock(showLabel.text);
[selfdismissViewControllerAnimated:YEScompletion:nil];
}
要达到那种 才算比较的理想 做出想支付宝 SDK那种 回调block 最好,我参看了支付宝 SDK 我试着去模仿 去执行,首相 将block 作为参数,放入函数里面,
放入之前 要声明,不声明 会出问题 ,为什么 我不知啊
typedefvoid(^MyBlock)(NSDictionary *resultDict);
@interface BlockViewController :UIViewController
@property (nonatomic,copy)void(^showBlock)(NSString* ); //名字为showBlock 的属性
//void(^showBlock)(NSString* );
-(void)callBackTheNum:(NSInteger )num num2:(NSInteger )num3 result:(MyBlock)myblock; //我不知道为什么 放到这里这样就不行了 必须要在前面声明。最后查看规则 其实也可以这么写 void(^)(NSDictionary *resultDict)myblock 来代替(MyBlock)myblock 就不用再前面声明 看个人喜好。
@end
在函数里面 执行 方法执行完后 把结果作为 回调的参数 放入 执行回调 函数 ,这样 A界面 调用 callBack..的这个方法 及 让B 去做 A需要的 事而且做完了还把结果告诉了A ,节省了很多。