C语言iOS Block界面反向传值

 

在上篇博客 《iOS
Block简介》
 中,侧重分析了 iOS
Block的概念等,本文将尊重于它们在支付中的应用。

Block是iOS4.0+ 和Mac OS X 10.6+
引进的对C语言的壮大,用来已毕匿名函数的特性。
用维基百科的话来说,Block是Apple
Inc.为C、C++以及Objective-C添加的特征,使得那一个语言可以用类lambda表明式的语法来创制闭包。关于闭包,一句话解释简洁明了:闭包就是可以读取其余函数内部变量的函数。

在iOS开发中,Block有那多少个地方的用处,界面反向传值就是里面之一。

万一我们有一个需求如下:界面A上面有一个button、一个label。从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上浮现。那是一个优良的反向传值的例子。那一个事例的为主是:“在界面B的输入框中输入字符串,在界面A的label上出示”。Block完成反向传值。

 

1、在第三个视图控制器的.h文件中定义申明Block属性:

//定义block
@property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);

 

@interface NextViewController ()

@property (weak, nonatomic) IBOutlet UITextField *inputTF;

@end


- (IBAction)BtnAction:(id)sender {

    //判断block是否为空
    if (self.NextViewControllerBlock) {
        self.NextViewControllerBlock(self.inputTF.text);

    }

    [self.navigationController popViewControllerAnimated:YES];
}

 

 

2、在首先个视图中收获第一个视图控制器,并且用第三个视图控制器来调用定义的性能:

@interface AViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nextVCInfoLabel;

@end

 

- (IBAction)btnClicked:(id)sender {

    NextViewController *nextVC = [[NextViewController alloc]init];
    nextVC.NextViewControllerBlock = ^(NSString *tfText){
        self.nextVCInfoLabel.text = tfText;
    };

    [self.navigationController pushViewController:nextVC animated:YES];
}

 

 

 效果如图:

 

C语言 1

 

出于本文用的是XIB,省略了一些UI细节,附上本文的代码链接:源码

哪个地方写的糟糕,望评论指导。谢过~