Block传值

在项目开发中,控制器之间传值是必不可少得。下面介绍一下block传值,分享经验或作笔记以备后用。


    首先定义控制器 AViewController 和 BViewController,现在的状态假设为:
    控制器 AViewController 模态推出 BViewController。

    在 AViewController 中有(UILabel *)label
    用来显示 BViewController 中 (UITextField *)textField 中的输入的字符串。

很容易发现,此时,将要由 B 向 A 传值。此时可以用代理传值,但是block传值代码量更少更方便。

现在我们需要在 BViewController 中声明 block 属性
//
//  BViewController.h
//

#import <UIKit/UIKit.h>

typedef void(^ReturnValue)(NSString *);

@interface BViewController : UIViewController

@property (nonatomic,strong) ReturnValue returnValue;

//注:我用的ARC,所以属性用了strong,如果为MRC请改为并必须使用copy。

@end
现在需要在 AViewController 中创建这个 BViewController 的地方实现这个block函数:
//
//  AViewController.m
//

#import "AViewController"
#import "BViewController"

@interface AViewController ()
@property (nonatomic,strong) UILabel *label;
//延展部分声明了 label 属性
@end

- (void)推出BViewController的方法:(){

    BViewController *BVC = [BViewController new];
    //这里当调用这个block时就会执行里面的语句,得到参数赋值给label
    BVC.returnValue = ^(NSString *gottenText)
    {
        self.label.text = gottenText;
    }

    //自动选一个方式推出BVC,由于没有导航控制器,所以为模态。
    [self showDetailViewController:BVC sender:nil];

}

实现了block函数,我们就需要调用了。现在在 BViewController 中,回到 AViewController 之前调用block。

//
// BViewController.m
//

#import "BViewController"

@interface BViewController ()
@property (nonatomic,strong) UITextField *textField;
//延展部分声明了textField属性
@end

- (void)回到AViewController的方法:{

//  调用block,参数为self.textField.text
    self.returnValue(self.textField.text);

    [self dismissViewControllerAnimated:YES completion:nil];

}

@end

这样从 B 控制器向 A 控制器就轻松完成了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值