iOS:使用block进行类与类,控制器与控制器之间的传值

时间:2023-03-08 21:23:32
iOS:使用block进行类与类,控制器与控制器之间的传值

介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值、代理传值、通知传值、block传值或者一些偏好设置也可以用来传值。。。。

每一种传值方式都有各自的优点和缺点,针对不同情况选择符合需要的方式进行传值。这里我比较喜欢block方式传值,个人觉得简单好用,省却了不少代码。

下面简单给一个在控制器之间FirstViewController和SecondViewController使用block传值的例子:

在SecondViewController中:

SecondViewController.h文件

//
// SecondViewController.h
// block传值
//
// Created by mac on 16/3/16.
// Copyright © 2016年 mac. All rights reserved.
// #import <UIKit/UIKit.h> /**
* 定义一个block别名,方便使用,该block返回值为void类型,有一个参数为字符串类型
*/
typedef void (^ReturnValueByBlock)(NSString *text); @interface SecondViewController : UIViewController
/**
* 声明一个block变量
*/
@property (copy,nonatomic)ReturnValueByBlock returnBlock; /**
* 声明一个实例方法,block代码块作为参数
*/
-(void)returnValue:(ReturnValueByBlock) block;
@end

SecondViewController.m文件

//
// SecondViewController.m
// block传值
//
// Created by mac on 16/3/16.
// Copyright © 2016年 mac. All rights reserved.
// #import "SecondViewController.h" @interface SecondViewController () @end @implementation SecondViewController - (void)viewDidLoad {
[super viewDidLoad]; //返回
self.view.backgroundColor = [UIColor greenColor];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(back:)];
} //返回
-(void)back:(UIBarButtonItem *)sender{ [self.navigationController popViewControllerAnimated:YES]; //给block参数赋值
self.returnBlock(@"我是中国人!");
} //通过实例方法回传值
-(void)returnValue:(ReturnValueByBlock)block{
self.returnBlock = block;
}
@end

在FirstViewController中:

FirstViewController.m文件

//
// ViewController.m
// block传值
//
// Created by mac on 16/3/16.
// Copyright © 2016年 mac. All rights reserved.
// #import "FirstViewController.h"
#import "SecondViewController.h" @interface FirstViewController ()
@end @implementation FirstViewController - (void)viewDidLoad {
[super viewDidLoad]; //创建按钮
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(, , , )];
btn.center = self.view.center;
btn.backgroundColor = [UIColor redColor];
[btn setTitle:@"入栈" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(push:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
} //入栈
-(void)push:(UIButton *)sender{ SecondViewController *secondVC = [[SecondViewController alloc]init];
[self.navigationController pushViewController:secondVC animated:YES]; //接收回传的值
[secondVC returnValue:^(NSString *text) {
NSLog(@"%@",text);
}];
}
@end

每次返回时打印结果:

-- ::45.762 block传值[:] 我是中国人!