iOS开发:界面之间传值之Block传值(Block高级用法:Block传值)

在iOS开发过程中,我们经常会涉及两个界面的传值,从中我们也总结了很多常用的传值的方法:

例如:从前一界面向后一界面传值(从前向后传值) 时,通常使用 “属性传值”;

     从后一界面向前一界面传值(从后向前传值)时,通常使用“代理方法传值”

             另外还有两种场景都适用的 “单例传值”等。

除了以上的几种传值方式外,在iOS的开发中我们还会经常使用的一种传值方法就是  “Block传值”

下面介绍Block在两个界面之间的传值:

        先简述一下整体的思想:

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

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


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

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

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

<span style="font-size:18px;"><strong>typedef void (^ReturnTextBlock)(NSString *showText);
 
@interface TextFieldViewController : UIViewController
 
@property (nonatomic, copy) ReturnTextBlock returnTextBlock;
 
- (void)returnText:(ReturnTextBlock)block;
 
@end</strong></span>
其中 typedef  是为要声明的Block重新定义了一个新的名称,原因是在后续的代码中使用定义的block更加方便,叫做
<span style="font-size:18px;"><strong>ReturnTextBlock</strong></span>

第三行 @property  是为当前的类定义的一个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#>

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


Block传值Demo的源码下载地址为:http://pan.baidu.com/s/1mgoO39m

附:该网盘会不定时分享iOS开发相关Demo及Mac电脑常用的软件与维护方法等,有意者可以添加关注











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值