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中修改的值。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wsh7365062/article/details/46798895
文章标签: IOS UI block
个人分类: iOS---基础篇
想对作者说点什么? 我来说一句

TransferValue

2017年07月31日 45KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭