iOS Block传值
来源:互联网 发布:cms 权限数据库设计 编辑:程序博客网 时间:2024/06/07 03:33
在前面有一篇文章已经对Block做了讲解:点击打开链接 这里是链接
前面也说了代理和通知,这两种设计模式的使用可以用来传值,这里再说Block,也是想说一下如何使用Block实现传值。
使用Block进行不同类之间的传值,常用场景也是在两个控制器之间实现反向传值,也就是有A、B两个控制器,由A跳转到B,在由B返回到A。在由B返回的时候,这里需要的传值就叫做反向传值,也叫逆向传值。下面,就在代码中实现如何使用Block去逆向传值。
代码示例:
AViewController.m文件代码:
#import "AViewController.h"
#import "BViewController.h"
@interface AViewController ()
{
UIButton *button;
UILabel *label;
}
@end
@implementation AViewController
- (void)viewDidLoad {
[superviewDidLoad];
[selfsetUI];
}
#pragma 创建视图
- (void)setUI{
label = [[UILabelalloc]initWithFrame:CGRectMake(100, 200, 200, 30)];
label.text =@"传值将在这里展示";
label.font = [UIFontsystemFontOfSize:15];
label.backgroundColor = [UIColoryellowColor];
[self.viewaddSubview:label];
button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.frame =CGRectMake(100, 300, 200, 30);
button.backgroundColor = [UIColorblueColor];
[buttonsetTintColor:[UIColorwhiteColor]];
[buttonsetTitle:@"点击跳转"forState:UIControlStateNormal];
[buttonaddTarget:selfaction:@selector(push)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:button];
}
#pragma 按钮点击事件,页面跳转
- (void)push{
//创建B控制器对象
BViewController *bVC = [[BViewControlleralloc]init];
//6、调用B控制器的block属性,获取到传值,并展示
bVC.block = ^(NSString *string){
label.text = string;
};
[self.navigationControllerpushViewController:bVC animated:YES];
}
@end
BViewController.h文件代码:#import <UIKit/UIKit.h>
//1、声明Block
typedef void (^myBlock)(NSString *);
@interface BViewController : UIViewController
//2、声明属性,将Block作为控制器的成员属性
@property(nonatomic,copy)myBlock block;
//3、声明方法
- (void)sendValueToA:(myBlock )block;
@end
BViewController.m文件代码:#import "BViewController.h"
@interface BViewController ()
{
UIButton *button;
UILabel *label;
}
@end
@implementation BViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColorgrayColor];
label = [[UILabelalloc]initWithFrame:CGRectMake(100, 200, 200, 30)];
label.text =@"B页面的传值";
label.font = [UIFontsystemFontOfSize:15];
label.backgroundColor = [UIColoryellowColor];
[self.viewaddSubview:label];
button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.frame =CGRectMake(100, 300, 200, 30);
button.backgroundColor = [UIColorblueColor];
[buttonsetTintColor:[UIColorwhiteColor]];
[buttonsetTitle:@"点击返回"forState:UIControlStateNormal];
[buttonaddTarget:selfaction:@selector(pop)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:button];
}
#pragma Block方法实现
//4、实现block方法
- (void)sendValueToA:(myBlock)block{
self.block = block;
}
#pragma 按钮点击事件,页面返回,并传值
- (void)pop{
//5、判断block对象是否存在,并给block传值
if (self.block !=nil) {
self.block(label.text);
}
[self.navigationControllerpopViewControllerAnimated:YES];
}
@end
运行结果:程序刚运行: 跳转到B控制器: 返回到A控制器:
在上面的图片中可以看出,传值没有问题,将B控制器中label上的字符串传递给了A控制器并且在label上进行了展示。
下面回到代码中,看看使用Block传值的步骤是如何:
第一步:声明Block,在前面的一篇文章中对Block做了介绍,知道,如何声明一个Block,这里是声明了一个没有返回值额Block,并且参数是一个字符串,这里的字符串就是与第五步中的调用block是给传递的参数对应。
//1、声明Block
typedef void (^myBlock)(NSString *);
第二步:将Block的对象作为控制器的成员属性进行声明。
//2、声明属性,将Block作为控制器的成员属性
@property(nonatomic, copy)myBlock block;
第三步、第四步:声明和实现方法,这个方法的作用是,对上面声明的属性进行赋值。
//3、声明方法
- (void)sendValueToA:(myBlock )block;
//4、实现block方法
- (void)sendValueToA:(myBlock)block{
self.block = block;
}
第五步:判断是否存在block对象,并给block传递参数,这个参数就是要传递的值,这里是一个字符串,在实际的开发中可以传递任意类型的对象。
//5、判断block对象是否存在,并给block传值
if (self.block != nil) {
self.block(label.text);
}
第六步:在要接收传值的控制器中创建控制器对象,调用block属性,接收传值。
//创建B控制器对象
BViewController *bVC = [[BViewController alloc]init];
//6、调用B控制器的block属性,获取到传值,并展示
bVC.block = ^(NSString *string){
label.text = string;
};
使用Block传值的内容,到这里基本上就说完了。上面的六个步骤就是使用Block的公式,按照这个公式就可以很好的使用Block进行页面之间的传值。
在下面的一片文章,会详细讲解页面传值和通知,代理,Block之间的区别。
- iOS传值(block传值)
- IOS传值:block传值
- ios block传值
- IOS Block传值
- ios block传值
- ios Block传值
- iOS block传值
- iOS Block传值
- iOS代理、block传值
- iOS用block传值
- iOS block传值
- iOS Block传值
- ios block传值
- iOS block传值
- iOS block传值
- IOS Block传值
- iOS利用Block传值
- iOS开发 Block传值
- Linux下静态库的生成以及使用实例图解
- 设置一个网站下面iframe只能在该域名下访问
- Java Web 基础 --- Filter 综述
- Qt添加库文件方法
- pixhawk篇之坐标系转化,相关转化矩阵知识,算法截取
- iOS Block传值
- How browsers work--Behind the scenes of modern web browsers (前端必读)
- 使用Storm实现实时大数据分析
- 基于hadoop2.6.0的hive-1.2.1安装
- .xml学习【1】
- FASTJSON格式转化POJO、JSON字符串、JSON对象
- https配置例子
- Apache如何实现静态缓存【实操案例】
- 为什么所有的UI元素都往上漂移了44pt。