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
生活不是战场,无需一教高下。做自己才最真!!!
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
生活不是战场,无需一教高下。做自己才最真!!!
相关文章推荐
- iOS-判断字符串中是否只含有\n
- iOS应用国际化教程(2014版)
- IOS 添加评论功能
- iOS 开发常用的调试工具
- iOS 如何在ARC下 使用MRC的类库
- iOS TableView和TableViewCell的风格
- IOS图片效果模糊化
- iOS 录屏大师启动页广告
- Nagios--简单篇
- IOS调试lldb命令常用,po,
- iOS导航栏相关属性
- IOS 多语言本地化 完美解决方案
- iOS-截图和把截图封装成一个方法
- iOS语音合成
- ios应用数据存储方式(归档)
- ios 获取应用唯一标识
- ios 获取应用唯一标识
- ios应用数据存储方式(偏好设置)
- ios应用数据存储方式(XML属性列表-plist)
- iOS获取当前时区