美文网首页
Block传值

Block传值

作者: TikBai | 来源:发表于2017-04-14 19:45 被阅读0次

    iOS传值一共有四种:属性传值,代理传值,通知传值以及Block传值;

    今天我们来说一下Block传值:

    概念:带有自动变量的匿名函数


    语法:

    “^”这个符号表示这是一个Block

    Block中不可以对C语言数组进行操作


    用途:

    传值


    模式

    无参数无返回值的Block

    无参数有返回值的Block

    有参数无返回值的Block

    有参数有返回值的Block


    block的代码是内联的,效率高于函数调用

    block对于外部变量默认是只读属性

    block被Objective-C看成是对象处理


    (1)在类中,定义一个Block变量,就像定义一个函数;

    (2)Block可以定义在方法内部,也可以定义在方法外部;

    (3)只有调用Block时候,才会执行其{}体内的代码;


    下面就直奔主题吧---传值

    1、传值方
    //.h 文件/**

    *  类型自定义

    */typedefvoid(^ReturnValueBlock) (NSString*strValue);@interfaceNextViewController:UIViewController/**

    *  声明一个ReturnValueBlock属性,这个Block是获取传值的界面传进来的

    */@property(nonatomic,copy) ReturnValueBlock returnValueBlock;@end=================================================================//.m 文件#import"NextViewController.h"@interfaceNextViewController()@property(weak,nonatomic)IBOutletUITextField*inputText;- (IBAction)back:(id)sender;@end@implementationNextViewController- (void)viewDidLoad {    [superviewDidLoad];self.navigationItem.title =@"第二个界面";}/**

    *  返回上一个界面

    *

    *  @param sender 按钮

    */- (IBAction)back:(id)sender {NSString*inputString =self.inputText.text;if(self.returnValueBlock) {//将自己的值传出去,完成传值self.returnValueBlock(inputString);    }    [self.navigationController popViewControllerAnimated:YES];}

    @end

    2、捕获方

    //.m 文件#import"ViewController.h"

    #import"NextViewController.h"

    @interfaceViewController()

    @property(weak,nonatomic)IBOutletUILabel*nextPassedValue;

    - (IBAction)next:(id)sender;@end

    @implementationViewController

    - (void)viewDidLoad {

    [superviewDidLoad];}

    //点击按钮跳转到第二个界面

    - (IBAction)next:(id)sender

    {    NextViewController *nvc = [[NextViewController alloc]init];

    //赋值Block,并将捕获的值赋值给

    UILabelnvc.returnValueBlock = ^(NSString*passedValue){self.nextPassedValue.text = passedValue;    }; 

      [self.navigationController pushViewController:nvc animated:YES];

    }@end

    相关文章

      网友评论

          本文标题:Block传值

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