Block传值

本文详细介绍了如何在iOS应用开发中利用Block在两个界面之间进行数据传递的过程,包括Block的定义、使用场景及核心代码实现,旨在帮助开发者更高效地实现界面间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、block是变量,可以作为参数传递给方法,下图就是当网络请求成功时调用success,失败时调用failure。
这里写图片描述

2、block一般用来传值;
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍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;
  }];//这个方法中的block是作为参数传进来的,在此方法中并未执行,这个block参数中存着一段代码:将第二个界面中文本框里的内容赋给第一个界面中的标签栏。而这段代码其实是在第二个界面将要消失时被调用的!
}
 可以看到代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。
    这时候上面(第一步中)定义的那个方法起作用了,如果你写一个[tfVC return Text按回车  ,系统会自动提示出来一个:

tfVC returnText:<#^(NSString *showText)block#>
的东西,我们只要在焦点上回车,就可以快速创建一个代码块了,大家可以试试。这在写代码的时候是非常方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值