iOS开发:使用Block在两个界面之间传值
2015-11-16 21:09
483 查看
需求
首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。
一、在第二个视图控制器的.h文件中定义声明Block属性
// 声明的Block重新定义了一个名字 ReturnTextBlock typedef void (^ReturnTextBlock)(NSString *showText); @interface TextFieldViewController : UIViewController // 定义的一个Block属性 @property (nonatomic, copy) ReturnTextBlock returnTextBlock; - (void)returnText:(ReturnTextBlock)block; @end
二、实现第二个视图控制器的方法
- (void)returnText:(ReturnTextBlock)block { self.returnTextBlock = block; } - (void)viewWillDisappear:(BOOL)animated { if (self.returnTextBlock != nil) { self.returnTextBlock(self.inputTF.text); // inputTF是视图中的UITextField。 } }
第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,需要重写:
- (void)viewWillDisappear:(BOOL)animated;方法。
三、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. TextFieldViewController *tfVC = segue.destinationViewController; [tfVC returnText:^(NSString *showText) { self.showLabel.text = showText; }]; }
看代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。
相关文章推荐
- iOS实现一个颜色渐变的弧形进度条
- ios9的新特性
- 对iOS的主要框架的介绍
- iOS宏定义
- iOS图文混排
- iOS 数字格式化(手机号码 银行卡号 格式化,验证码输入控制)
- cocoapods卡屏问题
- iOS开发中@property的属性weak nonatomic strong readonly
- iOS开发中的Git流程
- 一步步调试解决iOS内存泄漏
- 蓝懿iOS 技术内容交流和学习心得 11.16
- iOS另类的内存管理
- iOS本地通知和远程通知
- 【11/16】 iOS开发成长之路,【NSString 和NSInteger的相互转换,NSString字符串比较,拆分】
- #在蓝懿学习iOS的日子#day20
- iOS-- xcode7 自定义代码块的位置
- 总结iOS 多线程学习过程六
- 总结iOS 多线程学习过程五
- iOS开发拓展篇—CoreLocation简单介绍
- .pch文件的创建