UINavigationController介绍:15-使用Block逆传数据(目标VC->源VC)
被导航控制器管理的子控制器之间进行数据逆向传递,除了使用代理之外,还可以使用通知(NSNotification)以及Block。本节介绍一下如何使用Block。
使用Block实现数据逆传的步骤
下方的示例代码,实现了使用Block的方式从目标控制器向源控制器传递数据的过程。
- 在目标控制器DestinationViewController.h中,添加Block属性
@interface DestinationViewController : UIViewController
//声明一个名为PassDataBlock的block,无返回值,有一个NSString类型的参数
typedef void (^PassDataBlock)(NSString * dataText);
//添加PassDataBlock类型的block属性
@property (copy) PassDataBlock block;
@end
- 在目标控制器DestinationViewController.h中,设置block中代码的执行时机,即在返回上一个控制器之前调用
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//执行Block中的代码
if(self.block){
self.block(@"九九学院");
}
//返回上一个控制器
[self.navigationController popViewControllerAnimated:YES];
}
- 在源控制器SourceViewController.h中,给目标控制器对象的block赋值,即调用block时需要执行的操作
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
DestinationViewController *descVC = [[DestinationViewController alloc] init];
descVC.view.backgroundColor = [UIColor redColor];
descVC.navigationItem.title = @"目标控制器";
//跳转前传递数据
descVC.dataText = @"99iOS.com";
//设置Block
descVC.block = ^(NSString * string){
NSLog(@"目标控制器回传的字符串数据(使用Block):%@",string);
};
//控制器跳转
[self.navigationController pushViewController:descVC animated:YES];
}
运行结果如下。
示例代码
https://github.com/99ios/9.2.15
文章发布时间为: October 29th , 2016 at 11:01 am
最后编辑时间为: September 13th , 2017 at 03:03 pm
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 13th , 2017 at 03:03 pm
本文由 99ios 创作,转载请注明出处