block传值的简单实现
2016-02-18 14:53
204 查看
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值:
先说一下思想:
首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。
第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。
其实核心代码就几行代码:
下面是主要代码:(因为我是用storyBoard创建的工程,所以上面的属性和相应的方法,是使用系统生成的outlet)
一、在第二个视图控制器的.h文件中定义声明Block属性
第一行代码是为要声明的Block重新定义了一个名字
这样,下面在使用的时候就会很方便。
第三行是定义的一个Block属性
第四行是一个在第一个界面传进来一个Block语句块的函数,不用也可以,不过加上会减少代码的书写量
二、实现第二个视图控制器的方法
其中inputTF是视图中的UITextField。
第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,需要重写:
方法。
三、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性
如下方法中书写:
可以看到代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。
这时候上面(第一步中)定义的那个方法起作用了,如果你写一个[tfVC return Text按回车 ,系统会自动提示出来一个:
tfVC returnText:<#^(NSString *showText)block#>
的东西,我们只要在焦点上回车,就可以快速创建一个代码块了,大家可以试试。这在写代码的时候是非常方便的。
先说一下思想:
首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。
第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。
其实核心代码就几行代码:
下面是主要代码:(因为我是用storyBoard创建的工程,所以上面的属性和相应的方法,是使用系统生成的outlet)
一、在第二个视图控制器的.h文件中定义声明Block属性
typedef void (^ReturnTextBlock)(NSString *showText); @interface TextFieldViewController : UIViewController @property (nonatomic, copy) ReturnTextBlock returnTextBlock; - (void)returnText:(ReturnTextBlock)block; @end
第一行代码是为要声明的Block重新定义了一个名字
ReturnTextBlock
这样,下面在使用的时候就会很方便。
第三行是定义的一个Block属性
第四行是一个在第一个界面传进来一个Block语句块的函数,不用也可以,不过加上会减少代码的书写量
二、实现第二个视图控制器的方法
- (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]来获得新的视图控制器,也就是我们说的第二个视图控制器。
这时候上面(第一步中)定义的那个方法起作用了,如果你写一个[tfVC return Text按回车 ,系统会自动提示出来一个:
tfVC returnText:<#^(NSString *showText)block#>
的东西,我们只要在焦点上回车,就可以快速创建一个代码块了,大家可以试试。这在写代码的时候是非常方便的。
相关文章推荐
- TransformerFactory(示例,出错代码)
- linux服务器TCP并发连接数优化
- (21)odoo中的QWeb模板引擎
- eclipse安装color theme插件
- 体系结构模式简介
- 高斯消元练习
- Android侧滑菜单(最简)
- 创建本地yum源
- URL介绍及处理
- Android Studio 小技巧合集
- php从数据库中读取特定的行
- mysql-存储过程
- Win7(64bit)搭建SVN
- IOS开发之常见bug
- 关于Windows10中使用预览窗格无法预览Excel及图片文件的问题
- 普通二维码和带图片二维码生成
- 面向切面编程(AOP)的理解
- Unity3d 中的 A*寻路
- 《笨办法学Python》 第39课手记
- 使用Python的PIL模块来进行图片对比