美文网首页程序员
Block回调传值

Block回调传值

作者: Dayu大鱼 | 来源:发表于2016-04-14 15:32 被阅读354次

    实现回调传值的方式有哪些?

    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

    相关文章

      网友评论

        本文标题:Block回调传值

        本文链接:https://www.haomeiwen.com/subject/pgvglttx.html