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

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

        先说一下思想:ruby

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

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

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

下面是主要代码:(由于我是用storyBoard建立的工程,因此上面的属性和相应的方法,是使用系统生成的outlet)spa

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

typedef void (^ReturnTextBlock)(NSString *showText); @interface TextFieldViewController : UIViewController @property (nonatomic, copy) ReturnTextBlock returnTextBlock; - (void)returnText:(ReturnTextBlock)block; @end

        第一行代码是为要声明的Block从新定义了一个名字input

    ReturnTextBlock

        这样,下面在使用的时候就会很方便。io

        第三行是定义的一个Block属性class

        第四行是一个在第一个界面传进来一个Block语句块的函数,不用也能够,不过加上会减小代码的书写量

2、实现第二个视图控制器的方法

- (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;

方法。

3、在第一个视图中得到第二个视图控制器,而且用第二个视图控制器来调用定义的属性

以下方法中书写:

- (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#>

的东西,咱们只要在焦点上回车,就能够快速建立一个代码块了,你们能够试试。这在写代码的时候是很是方便的。

相关文章
相关标签/搜索