block传值步骤比代理传值步骤简便,实际开发中经常使用到。
block传值分为block属性传值和block方法传值
block属性传值
传值界面操作步骤:
1.声明一个block属性,用来实现下级界面向上级界面传值
2.执行block,并且传递参数
接收传值的界面操作步骤:
1.实现block
需要传值的界面-SecondViewController
@interface SecondViewController :UIViewController
//1.声明一个block属性,用来实现下级界面向上级界面传值
@property(nonatomic,copy) void (^secondBlock)(NSString*);
@property(nonatomic,copy) NSString*labelText;
@end
- (void)popToFirstVC:(UIButton*)sender
{
// 2.执行block,并且传递参数
self.secondBlock(@"路飞");
NSLog(@"----- %@",self.secondBlock);
[self.navigationControllerpopViewControllerAnimated:YES];
}
- (void)pushToNextVC:(UIButton*)sender
{
// 3.实现block
secondVC.secondBlock= ^(NSString*titleStr) {
weakSelf.label.text= titleStr;
};
[self.navigationController pushViewController:secondVCanimated:YES];
block方法传值
#import <Foundation/Foundation.h>
@interface AppTool :NSObject
typedef void(^AppToolBlock)(NSString*aString);
//通过该方法把一个NSInterger类型的数据转化为NSString并且通过block进行回调
- (void)changeNumber:(NSInteger)number andBlock:(AppToolBlock)block;
@end
#import "AppTool.h"
@implementation AppTool
- (void)changeNumber:(NSInteger)number andBlock:(AppToolBlock)block
{
NSString*string = [NSString stringWithFormat:@"%ld", number];
//通过block进行回调
block(string);
}
@end
#pragma mark -在方法中使用block
- (void)changeNumberToString:(UIButton*)sender
{
AppTool*appTool = [[AppTool alloc] init];
[appTool changeNumber:10010 andBlock:^(NSString*aString) {
self.label.text= aString;
}];
}