反向传值:利用block和delegate回传值

很多时候,开发的小伙伴需要反向传值,但是又不知道该怎么传,其实很简单,下面我简单介绍一下分别用block和delegate进行反向传值,希望能够帮到你们.

先附上github地址:https://github.com/ZSyingyu/BlockAndDelegateDemo.git

这些是在ZYYBankNameViewController里需要做的
1.利用block反向传值
要利用block反向传值,首先要声明一个block

typedef void(^bankNameBlock)(NSString *code,NSString *name);//block

同时还需要声明一个初始化方法

-(instancetype)initWithBankNameBlock:(bankNameBlock)block;//初始化方法

那么接下来我们就需要在.m中实现这个方法

-(instancetype)initWithBankNameBlock:(bankNameBlock)block {
    if (self == [super init]) {
        _block = block;
    }
    return self;
}

//block反向传值
NSDictionary *dic = self.bankArr[indexPath.row];
NSString *name = [[dic allKeys] firstObject];
NSString *code = [[dic allValues] firstObject];
if (_block) {
    _block(code,name);
}
[self.navigationController popViewControllerAnimated:YES];

2.利用delegate反向传值
同样的也需要先声明一个代理

@protocol BankNameDelegate <NSObject>//代理

-(void)popViewCode:(NSString *)code WithName:(NSString *)name;

@end

@property(nonatomic, weak)id<BankNameDelegate> delegate;//声明代理

接下来在.m中执行这个代理方法

//delegate回传值方法
NSDictionary *dic = self.bankArr[indexPath.row];
NSString *name = [[dic allKeys] firstObject];
NSString *code = [[dic allValues] firstObject];

[self.delegate popViewCode:code WithName:name];
[self.navigationController popViewControllerAnimated:YES];

在ZYYTestBlockViewController里就需要接收这些值了

//block回传值
ZYYBankNameViewController *bankNameVc = [[ZYYBankNameViewController alloc] initWithBankNameBlock:^(NSString *code, NSString *name) {
    NSLog(@"code:%@",code);
    NSLog(@"name:%@",name);
    NSString *nameCode = [NSString stringWithFormat:@"%@%@",name,code];
    [self.bankNameBtn setTitle:nameCode forState:UIControlStateNormal];
}];
[self.navigationController pushViewController:bankNameVc animated:YES];


//delegate回传值
ZYYBankNameViewController *bankNameVc = [[ZYYBankNameViewController alloc] init];
bankNameVc.delegate = self;
[self.navigationController pushViewController:bankNameVc animated:YES];

使用delegate反向传值的时候就需要执行代理方法了

#pragma mark - BankNameDelegate
-(void)popViewCode:(NSString *)code WithName:(NSString *)name {
    NSLog(@"code:%@",code);
    NSLog(@"name:%@",name);
    NSString *nameCode = [NSString stringWithFormat:@"%@%@",name,code];
    [self.bankNameBtn setTitle:nameCode forState:UIControlStateNormal];

}

原理很简单,可能写的比较乱,因为我们比较让人蛋疼的产品一直在我旁边说需求,所以对不住大家了,可以配合着demo来看,如果有看不明白的欢迎留言,我会尽快回复的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,235评论 25 709
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,401评论 30 472
  • 设计模式 1.delegate和notification什么区别,什么情况使用? 2.描述一下KVO和KVC。 K...
    丶逐渐阅读 5,958评论 3 2
  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 5,595评论 1 10

友情链接更多精彩内容