初探下Block,也让自己知道简单的Block使用并没有想象中的那么艰难。
下面所有的都是自己语言组织的,非常浅显的东西+Demo,大神止步哟。
Block初了解
- 一种比较特殊的数据类型,保存一段代码块,其它地方需要使用的时候直接调用即可。一般用
Copy
修饰。 - Block的格式
- 声明
返回值(^block变量名)(参数)
.
例如:typedef void(^valueBlock)(NSString *)
; - 调用Block中的代码块.
block变量名(实参)
;
这些直接看个Demo吧。
现在的需求:
两个界面,ViewController1(简称VC和VC2 VC2中一个输入框,一个Button。 点击Button将输入框中的value传给VC1中的一个Label
思路: 应该是在VC2中定义block。点击事件中将输入框中的值传进去。push到VC1之后,在VC1中调用Block将其显示出来。
代码:
首先是VC2中的定义声明:
//声明Block typedef void(^valueBlock)(NSString *);
定义Block:
@property (nonatomic, copy) valueBlock block01;
VC2中的Btn点击事件:
- (IBAction)btn:(id)sender { self.block01(_textField.text); [self.navigationController popViewControllerAnimated:YES]; }
返回到VC1界面的处理:
**初始化VC2控制器,调用VC2中的变量
VC2.block = ^(参数){
//代码块
};
[附上两张代码图 代码不多,所以就不上了]
- (IBAction)sendBtn:(id)sender {
SecondViewController *sec = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
sec.block01 = ^(NSString *sss){
self.label01.text = sss;
};
[self.navigationController pushViewController:sec animated:YES];
}
总结 : 传值给前面界面的时候写的部分容易弄混淆:
sec.block01 = ^(NSString *aaa){ self.label01.text = aaa; };
PS: 大家一起学习,有不懂的地方一起专研。这是初探。写的不好的地方勿喷哈。谢谢~