block

作者: 雷霆嘎巴嘎嘎 | 来源:发表于2016-06-30 21:09 被阅读23次

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

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

    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;

    在第一个控制器中获得第二个控制器

    TextFieldViewController *tfVC = segue.destinationViewController;

    [tfVC returnText:^(NSString *showText) {

    self.showLabel.text = showText;

    }];

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

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

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

    相关文章

      网友评论

          本文标题:block

          本文链接:https://www.haomeiwen.com/subject/fjrrlttx.html