整理IOS中Block用作属性传值回调用法
Posted JDYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整理IOS中Block用作属性传值回调用法相关的知识,希望对你有一定的参考价值。
1.block用作属性 封装一段代码
在模型类中声明block属性 ,注意block的属性要使用copy否则会出问题
@property (copy, nonatomic) void (^actionBlock)();
@property (copy, nonatomic) void (^actionWithPapameterBlock)(int papameter);
@property (copy,nonatomic) NSString *(^actionToReturnStirng)();
其他控制器创建模型类对象,并且为block属性赋予一段代码 。曾经为cell的模型类添加了block属性后,将点击cell跳转的控制器封装到块代码中,调用起来十分方便。
//无返回值无参数block
_model = [[Modelalloc]init];
_model.actionBlock = ^{
NSLog(@"actionBlock");
};
//无返回值有参数block
_model.actionWithPapameterBlock = ^(int a){
NSLog(@"%d",a);
};
//有返回值
_model.actionToReturnStirng = ^{
[email protected]"hello";
};
在其他方法中调用block
- (IBAction)tapBtn:(id)sender
{
_model.actionBlock();
_model.actionWithPapameterBlock(10);
NSLog(@"%@",_model.actionToReturnStirng());
}
2.控制器传值
在需要传值的控制器定义block,此处传递UITextField中输入的NSString,并且声明初始化方法
typedefvoid(^textFieldChangedBlock)(NSString *text);
-(id)initWithBlock:(textFieldChangedBlock)block;
实现文件中用成员变量记录block
@implementation Model{
textFieldChangedBlock _changedBlock;
}
- (id)initWithBlock:(textFieldChangedBlock)block
{
self = [super init];
if (self) {
_changedBlock = block;
}
return self;
}
执行block
- (void)click
{ //返回
_changedBlock(self.textFiled.text);
[self dismissViewControllerAnimated:YES completion:nil];
}
Block传值,在需要显示textfield内容的控制器实例化存储有block的类
DetailViewController *detail = [[DetailViewController alloc]initWithBlock:^(NSString *text) {
[self.label setText:text];
}];
3.曾在用sprite kit加载scene素材时用到了block
//主控制器中利用自定义scene提供的方法加载场景素材
[scene loadSceneAssetsWithCompletionHandler:^{
scene.scaleMode =SKSceneScaleModeAspectFill;
[skView presentScene:scene];
}];
// block实现
typedefvoid(^AssetLoadCompletionHandler)(void);
- (void)loadSceneAssetsWithCompletionHandler:(AssetLoadCompletionHandler)callback
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[selfloadSceneAssets];
if (callback) {
dispatch_async(dispatch_get_main_queue(), ^{
callback();//回调
});
}
});
}
以上是关于整理IOS中Block用作属性传值回调用法的主要内容,如果未能解决你的问题,请参考以下文章
iOS 页面间几种传值方式(属性,代理,block,单例,通知)
iOS 页面间几种传值方式(属性,代理,block,单例,通知)