一直对block传值理解不深,觉得很复杂,所有遇见传值的问题大多数还是用代理传值,但是代理传值还得注册协议实现代理用起来有些麻烦,人不能在原地停留,所以决定必须把block研究明白,幸得高人指导,结果发现block传值是如此的简单方便,今天就把我所学得的结果给大家分享一下,声明本人是一名初级iOS开发人员写的能简单些儿,适合初级开发人员看看,大神们可以略过哈!有写的不明白的地方也希望大家指出来纠正,同时也感谢该位高人的指点本人不胜感激,感谢一直以来您对本人不厌其烦的大力指导,在这里对你说声由衷的感谢,这是本人第一次在简书上写文章所以说的能多一些儿,好啦!废话不说,现在就把我所学的心得分享出来给大家,下面上代码!!
示例说明:由第二个页面跳转到第三个页面,然后再由第三个页面中的按钮触发事件中返回到第二个页面中,同时改变第二个页面的背景色。
1.首先在在.h声明文件中声明block变量
#import@interface ThirdViewController : UIViewController
@property (nonatomic,strong)void(^thirdBlock)(UIColor *color);
- (IBAction)backAction:(id)sender;
@end
2.然后进入.msh文件中处理按钮点击事件:如下图:
- (IBAction)backAction:(id)sender {
if (self.thirdBlock) {
self.thirdBlock([UIColor purpleColor]); //选择要传递给上个页面的颜色。
}
[self.navigationController popViewControllerAnimated:YES];//返回上个页面
}
3.然后进入上个页面的.m实现文件中,如下图:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
ThirdViewController * third = [segue destinationViewController];
third.thirdBlock = ^(UIColor * color){
self.view.backgroundColor = color;//把传递过来的页面的颜色赋值给自己的背景色。然后运行看看结果如何?大功告成!是不是很方便啊!
};
}
//声明本人采用的UIStoryboard的segue方式进行页面跳转,如果是普通的代码跳转传值过程只需要在跳转的方法中进行即可。跳转方法如下:
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event
{
[self performSegueWithIdentifier:@"ThirdVc" sender:self];
}