①在后面控制器的 .h文件 中声明block
// 一会要传的值为NSString类型
typedef void (^newBlock)(NSString *);
@interface NewViewController : UIViewController
// 声明block属性
@property (nonatomic, copy) newBlock block;
// 声明block方法
- (void)text:(newBlock)block;
@end
②在后面控制器的 .m文件 中设置block
// 设置block,设置要传的值
- (void)text:(newBlock)block
{
self.block = block;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:YES];
if (self.block != nil) {
self.block(@"呵呵");
}
}
③在前面控制器的 .m文件 中接收传来的值
#import "ViewController.h"
#import "NewViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:(UIButtonTypeRoundedRect)];
button.frame = CGRectMake(0, 100, 100, 100);
button.backgroundColor = [UIColor redColor];
[button addTarget:self action:@selector(push) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button];
}
- (void)push
{
NewViewController *newVC = [[NewViewController alloc] init];
// 接收block传来的值
newVC.block = ^(NSString *str){
NSLog(@"%@", str);
};
[self.navigationController pushViewController:newVC animated:YES];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
④最终实现效果:在控制台打印出了"呵呵"
到此,block完成传值