博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Block的一些定义和使用
阅读量:6455 次
发布时间:2019-06-23

本文共 2770 字,大约阅读时间需要 9 分钟。

在开发中传值常常会用到代理和Block,今天先说说Block的使用:

1.Block 的定义:

格式: 返回值/Block名称/参数

举例:

void (^myBlock)(UIImageView *)

2.定义Block中要执行的方法

举例:

= ^(UIImageView *imageView){      NSLog(@"----------");};

3.执行一个Block

举例:

myBlock(self.imageView);

4.传值事例:

情况说明: 有A、B两个界面,A界面有一个展示内容的UILabel,B界面有一个可以输入文字的UITextField.当从A页面PUSH到B页面的时候,在B页面中的UITextField中输入内容后,从B页面返回到A界面的时候,在A页面中的UILabel 中可以看到在B页面中输入的内容。

A页面 对应 OneViewController 类

B页面 对应 SecondViewController 类

1.需要先在B界面中定义Block:

SecondViewController.h 中:

#import 
typedef void (^BlockValue)(NSString *valueString);@interface SecondViewController : UIViewController@property (nonatomic,copy) BlockValue blockValue;- (void)getValue:(BlockValue)aBlock;@end

SecondViewController.m 中:

#import "SecondViewController.h"    @interface SecondViewController ()    @property (nonatomic,strong) UITextField *textField;    @end        @implementation SecondViewController - (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor whiteColor];    UITextField *textField = [[UITextField alloc] init];    textField.frame = CGRectMake(50, 200, 200, 50);    textField.placeholder = @"请输入需要传值的数据";    [self.view addSubview:textField];    self.textField = textField;} - (void)getValue:(BlockValue)aBlock {        self.blockValue = aBlock;} - (void)viewWillDisappear:(BOOL)animated {        [super viewWillDisappear:animated];        if (self.blockValue) {            self.blockValue(_textField.text);        }} @end

2.在A界面定义SecondViewController:

#import "OneViewController.h"#import "SecondViewController.h" @interface OneViewController ()@property (nonatomic,strong) UILabel *label;     @end@implementation OneViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    UILabel *label = [[UILabel alloc] init];    label.text = @"等待传值";    label.frame = CGRectMake(50, 200, 200, 50);    [self.view addSubview:label];    self.label = label;     UIButton *button = [UIButton         buttonWithType:UIButtonTypeCustom];     button.frame =CGRectMake(50, 500, 80, 50);     [button setTitle:@"下一页" forState:UIControlStateNormal];     [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];     [button addTarget:self action:@selector(nextStep:) forControlEvents:UIControlEventTouchUpInside];     [self.view addSubview:button];}- (void)nextStep:(UIButton *)button {    SecondViewController *secondVc = [[SecondViewController alloc] init];    secondVc.blockValue = ^(NSString *valueString) {        self.label.text = valueString;    };    [self.navigationController pushViewController:secondVc animated:YES]; }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

转载地址:http://thfzo.baihongyu.com/

你可能感兴趣的文章
利用android studio 生成 JNI需要的动态库so文件
查看>>
poll
查看>>
衡量优秀的卓越的前端工程师
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
4.6 直接插入排序法
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
盘点国内外那些有野心的BI公司
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
m5-第9周作业
查看>>
odoo 权限设置
查看>>
asp操作access提示“无法从指定的数据表中删除”
查看>>
git bash 风格调整
查看>>
997D Cycles in product
查看>>
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
java二维数组内存模型_C++二级指针第二种内存模型(二维数组)
查看>>
java static import 与 import_Java中的import和static import语句之间有什么区别?
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>