使用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的原理就是这样,使用方法还非常多,希望大家多多练习。