程序员

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

上一篇下一篇

猜你喜欢

热点阅读