美文网首页
iOS开发:使用Block在两个界面之间传值(Block高级用法

iOS开发:使用Block在两个界面之间传值(Block高级用法

作者: 无所不知的程序员 | 来源:发表于2017-03-09 08:27 被阅读0次

使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值:

先说一下思想:

首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。

第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。

其实核心代码就几行代码:

下面是主要代码:(因为我是用storyBoard创建的工程,所以上面的属性和相应的方法,是使用系统生成的outlet)

一、在第二个视图控制器的.h文件中定义声明Block属性

typedefvoid(^ReturnTextBlock)(NSString*showText);@interfaceTextFieldViewController: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 returnText按回车,系统会自动提示出来一个:

tfVC returnText:<#^(NSString *showText)block#>

的东西,我们只要在焦点上回车,就可以快速创建一个代码块了,大家可以试试。这在写代码的时候是非常方便的。

附件中是完整的工程代码,大家可以运行看看效果

相关文章

  • iOS开发:使用Block在两个界面之间传值(Block高级用法

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首...

  • iOS技术总结(Block)[整理]

    摘要: . Block代码块结构及几种类型. __block使用.使用block在两个界面中传值问题 官方文档:苹...

  • Block的整理

    使用Block在两个界面之间传值 1. 在 B 控制器的.h文件中定义声明Block属性 typedef void...

  • block作为参数传递

    众所周知,block是iOS开发中一个经常使用的模块, block 可以用来包含一段代码块,可以传值, 用法灵活,...

  • iOS开发-block传值

    block传值步骤比代理传值步骤简便,实际开发中经常使用到。 block传值分为block属性传值和block方法...

  • iOS开发——Block在实际项目中的传值

    在iOS开发中,我们会在实际过程中大量使用Block,其中Block有个很基础的功能,就是完成两个页面间的传值。而...

  • Object-c block

    block 在开发中的用途多种多样,一下是我遇到的block的常见用法 block 保存代码 block传值 bl...

  • 浅谈Block

    Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...

  • ios简单学之3-block和回调

    Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...

  • iOS开发-通知的基本使用

    通知传值 界面之间的传值有很多方法,最基本的是可以实例化对象进行传值,也可以使用block块或者是使用通知进行传值...

网友评论

      本文标题:iOS开发:使用Block在两个界面之间传值(Block高级用法

      本文链接:https://www.haomeiwen.com/subject/uyxwgttx.html