Block高级使用 传值

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

  //Block直接或者间接使用了父对象,就会造成循环引用   __block

  //Block声明是用block

        先说一下思想:

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

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

//下面我来简单的说一下使用方法

//在第二个控制器的.h中声明block

//

//  SecondViewController.h

//  Lesson_13_block

//

//  Created by 李洪鹏 on 15/7/16.

//  Copyright (c) 2015 李洪鹏. All rights reserved.

//

#import <UIKit/UIKit.h>

 

typedef void(^TransmitValueBlock)(NSString *);

 @interface SecondViewController : UIViewController

//block copy

@property (nonatomic, copy)TransmitValueBlock ablock;

 //Block直接或者间接使用了父对象,就会造成循环引用

@end

 

//在第二个控制器中.m中调用这个方法

- (void)button2Action:(UIBarButtonItem *)sender

{

  self.ablock(self.secondView.textField.text);

    [self.navigationController popViewControllerAnimated:YES];

}

 

//在第一个控制器中.m中回调这个block方法

  

    __weak FirstViewController *heheself = self;

    //block 里面直接使用self的话造成循环引用, 使用 __weak 来解决

    self.block = ^(NSString *string){

  heheself.firstView.label.text = string;

    };

    

//block的原理就是这样,使用方法还非常多,希望大家多多练习。

原文地址:https://www.cnblogs.com/lhp-1992/p/4652302.html