block在俩个UIViewController间传值
2015-07-08 09:00
316 查看
最近刚学了几招block 的高级用法,其实就是利用block语法在俩个UIViewController之间传值,在这里分享给初学者,同时也方便我自己理解。我们知道UINavigationController类管理UIViewController的时候,利用的是“栈”的思想,在这里不做过多解释,切入正题,假设我们现在有俩个UIViewController,viewC1和viewC2,viewC1比viewC2先进入到UINavigationController里,即viewC2是由viewC1push出来的, 这里的传值是指将viewC2的值传到viewC1里面 。例如通讯录的修改,微信里修改信息等。
不多说,直接上例子:
一.首先在viewC2的头文件中的代码:
提示:
重定义block在Xcode中有快捷实现方式,直接在@interfacexxx 上面一行打typedef会有提示:
直接回车,第一个参数是返回值类型,第二个为重定义的block名称,第三个为要传参数类型和参数名;然后需要定义重定义block类型的属性,并且实现参数为该重定义类型block的方法。
二.viewC2的.m文件中代码:
解释:实现头文件中定义的方法,方法内部写将参数赋值给重定义block的属性,然后在合适的地方执行block代码,block里面的参数即你要传的值。
三.在viewC1中push第二个页面的时候调用 viewC2的方法,直接回车,block重定义中的参数名里存的即是要在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中修改的值。
相关文章推荐
- 百度UEditor使用
- 免费素材:包含 250+ 组件的 DO UI Kit
- Android UI 组件开源软件
- UISegmentControl/多段选择视图
- EasyUI 树型菜单 异步加载树
- 黑马程序员——JAVA笔记——GUI
- druid 数据源密码加密配置
- Work around by " Due to heavy load, the latest workflow operation has been queued. "
- Work around by " Due to heavy load, the latest workflow operation has been queued. " 分类: Sharepoint 2015-07-08 00:19 3人阅读 评论(0) 收藏
- iOS-UITextField收起键盘和拓展
- 线程的学习(一)
- MySQL提示:The server quit without updating PID file
- UIViewController的生命周期及iOS程序执行顺序
- C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
- UIScrollView现实自动循环滚动
- SPOJ 375 Query on a tree(初学树链剖分)
- Foundation框架-05 NSNumber和NSValue
- Mac Error Create Android Project - “Errors running builder 'Android Resource Manager' on project”
- DicomIoException: Requested 132 bytes past end of fixed length stream.
- Dynamics CRM 2015 Update 1 系列(7): 消息事务 - ExecuteTransactionRequest