iOS页面之间传值,通常采取四种方式:属性、通知、代理和Block回调传值这四种方式。
今天在这里,我们详细讲解Block回调传值这种方式。
一、Block回调传值通常用于两个页面之间的反向传值。如下所示,图一所示第一个视图控制器需要接收来自第二个视图控制器的值(图2 为第二个界面),即反向传值,在这里我们用Block回调实现。
图1 第一个视图控制器
图2 第二个视图控制器
图3 第一个视图控制器接收到第二个视图控制器回传的值
二、具体实现步骤
第一个视图控制器:ViewController
第二个视图控制器:CustomViewController
(一) 首先,在第二个视图控制器CustomViewController.h中声明Block属性,该Block有参数,无返回值。如下图所示。
第二行代码,为整个Block函数定义了一个新名字ReturnTextBlock,方便后面的使用
第六行代码,定义一个Block属性
(二)其次,第一个视图控制器ViewController.m文件中,获得第二个视图控制器的对象cvc,而该cvc对象拥有之前定义的Block属性(ReturnTextBlock block),在此处编写该Block的实现,cvc.block = ^ ( NSString* text ) { _label.text = text ; }; 如下图所示。
注意:此处只是该Block方法的定义,当用户点击“到第二个界面”按钮时,该Block内部的代码_label.text = text ;并不会执行,只有该Block被调用时(需要传值时,就会调用该Block。在此案例中,该Block的调用在第二个视图控制中),才会执行该Block内部的代码。
(三)最后,在第二个视图控制器CustomViewController.m文件中调用Block传值。该语句_block(_textField.text);就是调用Block。运行这条语句就是去执行第一个视图控制器ViewController.m文件中^ ( NSString* text ) { _label.text = text ; };代码(因为这是该Block的实现),从而将值回传到第一个界面。
三、以上就是Block传值的三个步骤,声明、定义、调用。一定要记住,定义只有被调用时才会被执行!!!