zoukankan      html  css  js  c++  java
  • 初探swift语言的学习笔记(闭包-匿名函数或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#>

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

    附件中是完整的工程代码,大家可以运行看看效果

  • 相关阅读:
    字符串和正则表达式
    委托和事件
    集合
    C#基础
    Pwnable中的passcode解题记录:
    DevExpress插件中GridView控件界面显示风格的保存与加载
    地区代码表(利用Hashtable实现)
    关于DevExpress插件中LookUpEdit控件的快速搜索列的定位问题
    C#实现PictureBox控件的动态添加及在每个图像左上角添加一个复选框
    Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4991692.html
Copyright © 2011-2022 走看看