block在俩个UIViewController间传值

最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解。我们知道UINavigationController类管理UIViewController的时候,利用的是“栈”的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavigationController里,即viewC2是由viewC1push出来的, 这里的传值是指将viewC2的值传到viewC1里面 。例如通讯录的修改,微信里修改信息等。 

不多说,直接上例子: 

一.首先在viewC2的头文件中的代码: 

//1 。重定义一个block类型
typedef void(^BL)(UIColor *color);
typedef void(^stringBL)(NSString *string);
@interface SecondViewController : UIViewController
//定义一个block属性 一定要使用copy特性  原因:
@property (nonatomic, copy) BL block;
@property (nonatomic, copy) stringBL string;
- (void)valueBlock:(BL)block;
- (void)valueStringBlock:(stringBL)block;

提示:

重定义block在Xcode中有快捷实现方式,直接在@interfacexxx 上面一行打typedef会有提示:  直接回车,第一个参数是返回值类型,第二个为重定义的block名称,第三个为要传参数类型和参数名;然后需要定义重定义block类型的属性,并且实现参数为该重定义类型block的方法。 

二.viewC2的.m文件中代码:

- (void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
  button.frame = CGRectMake(0, 70, 320, 40);
  [self.view addSubview:button];
  [button setTitle:@"return 1 page" forState:UIControlStateNormal];
  [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonAction:(UIButton *)button
{
//	2.在合适的地方执行block代码
  self.block([UIColor redColor]);
  self.string(@"asdasdasd");
  [self.navigationController popToRootViewControllerAnimated:YES];
}
- (void)valueBlock:(BL)block
{
  self.block = block;
}
- (void)valueStringBlock:(stringBL)block
{
  self.string = block;
}

解释:实现头文件中定义的方法,方法内部写将参数赋值给重定义block的属性,然后在合适的地方执行block代码,block里面的参数即你要传的值。

三.在viewC1中push第二个页面的时候调用 viewC2的方法,直接回车,block重定义中的参数名里存的即是要在viewC1中修改的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值