您的位置:首页 > 移动开发 > IOS开发

iOS开发:界面传值之Block传值

2015-09-10 14:03 197 查看
iOS开发:Block传值
1.block的语法:



2.简单实现:

(1)、无参无返回值:

void (^block1)()= ^(){

NSLog(@"Hello, Block");

};

block1();

结果:Hello,Block

(2)、有参无返回值:

void (^block2)(NSString *) = ^(NSString *str){
NSLog(@"%@", str);

};

block2(@"I am Block!");
结果:
I am Block!
(3)、无参有返回值

NSInteger (^block3) () = ^NSInteger(){

return (arc4random() % (20 - 10 + 1) + 10);

};
NSLog(@"%ld", block3());
结果:19(随机[10, 20]的一个数)。
(4)、有参有返回值

NSString* (^block4)(NSString *, NSString *) = ^NSString *(NSString *str1, NSString *str2){

return [str1 stringByAppendingString:str2];
};
NSLog(@"%@", block4(@"I am", @"block!"));
结果:
I amblock!
3.block实例:数组排序





4.block传值!!!重点!!!
例如:建立两个viewController:
第一个viewController里面建立一个button,用于触发跳转到第二页(SecondViewController);
第二个界面建立一个textfield 和 一个button,在textField里面输入一个字符串,点击button返回前一页的同时将这个字符串传回第一个界面并在第一个界面打印输出。
(1).在第二个界面的.h文件中:定义声明Block属性
a) 重定义block类型 :
typedef void(^block)(NSString *); *说明:block相当于是void (^)(NSString *)类型的新名字
b)定义一个block类型的属性变量
@property(nonatomic, copy)block myBlock;
(2).在第二个界面的.m文件中:在button的触发事件里传参数

- (void)clickBackAction{

[self.navigationController popToRootViewControllerAnimated:YES];
// 给block传参数,把textField的值传回去
self.myBlock(_textField.text);
}
(3).在第一个界面实现传值:点击button打印出传过来的值

- (void)clickAction{//这是第一个界面的button触发事件

void (^block)(NSString *) = ^(NSString *str){

NSLog(@"%@", str);

SecondViewController *sv = [[SecondViewController alloc]init];
sv.myBlock = block;

};
}

使用block的注意事项:
1、局部变量和全局变量的区别:
如果定义的block是局部的,那只能使用这个block值,但不能修改这个值,例如不能++,--运算。
*如果想修改这个局部变量的block,必须在定义变量前加 "_ _block",
例如:__block NSInteger a = 100;
如果定义的block是全局变量, 既可以使用,也可以修改block值
2.在block内部访问属性或self的时候,不要直接用self.XX

生活不是战场,无需一教高下。做自己才最真!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: