zoukankan      html  css  js  c++  java
  • iOS开发:使用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;
      }];
    }

         可以看到代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。

            这时候上面(第一步中)定义的那个方法起作用了,如果你写一个[tfVC return Text按回车  ,系统会自动提示出来一个: 

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

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

  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/chunji/p/5287707.html
Copyright © 2011-2022 走看看