Block回调传值
2016-04-14 本文已影响354人
Dayu大鱼
实现回调传值的方式有哪些?
1.block
2.delegate
3.NSNotificationCenter
1.block
先声明一个block (在哪里声明?)
需要将哪里的内容传出去就在那里声明一个block
回调的值放在哪里需要在接口部分 拖拽过来(需要注意拖拽到什么地方?存放回调的值的当前类的接口文件里面 )
比如:label是存放回调值的,则拖拽(按control + label控件 拖到ViewController.h 文件接口内 ,并命名)
textView是存放用户输入的需要做回调的空间,以相同的方式拖拽到PushViewController接口内 (当前控件所在的类头文件内)
需要传值的视图代码
PushViewController.h
typedef void (^Block) (NSString*);
@interface PushViewController :UIViewController
@prooerty (nonatomic)Block PassValueBlock ;
如果省略这个默认为strong
PushViewControlle.m代码
#import "PushViewController.h"
@interface PushViewController ()
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end
⚠️注意:这个是一个分类,可以隐藏接口实现传值的过程:视图消失的时候将输入的内容作为Block(PassValueBblock)的参数即可
-(void)ViewWillDisappear:animated{
[superviewWillDisappear:animated];
_PassValueBlock(_textView.text);
}```
#####ViewController.m代码
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *textlLabel;
@end
//:可以隐藏接口
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
PushViewController *pushViewController = segue.destinationViewController;
pushViewController.passValueBlock = ^(NSString *text) {
_textlLabel.text = text;
};
//passValueBlock的生命周期在这个方法内
NSLog(@"%@",pushViewController.passValueBlock);
}
//:ViewController.m内
块内进行传值 ,将输入的数值赋值给回调标签textLbl.text