博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发之利用Block逆向传值
阅读量:6324 次
发布时间:2019-06-22

本文共 1962 字,大约阅读时间需要 6 分钟。

在一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,相比较代理,我个人认为反而要简单些,但是需要处理好细节问题,如Block循环引用。还是用前文的案例,本次使用Block来实现,Block的基本知识本文不再赘述。

一、书写规范

Block传值,需要注意的是,谁传值就需要定义Block,捕获方仅仅需要传递Block给传值方,并处理捕获的值。

  • 传值方

    1、定义Block用于传值
    2、声明一个上述Block属性,这个属性的具体实现需要捕获方传进来
    3、在需要传值的时候调用Block完成传值

  • 捕获方

    1、传递一个Block给传值方
    2、在Block中捕获传过来的值,并根据需求处理捕获的值

二、Block与逆向传值

还是那句No Code, No BB,案例效果如下:

三、实现步骤

1、传值方

//.h 文件/** *  类型自定义 */typedef void (^ReturnValueBlock) (NSString *strValue);@interface NextViewController : UIViewController/** *  声明一个ReturnValueBlock属性,这个Block是获取传值的界面传进来的 */@property(nonatomic, copy) ReturnValueBlock returnValueBlock;@end=================================================================//.m 文件#import "NextViewController.h"@interface NextViewController ()@property (weak, nonatomic) IBOutlet UITextField *inputText;- (IBAction)back:(id)sender;@end@implementation NextViewController- (void)viewDidLoad {    [super viewDidLoad];    self.navigationItem.title = @"第二个界面";}/** *  返回上一个界面 * *  @param sender 按钮 */- (IBAction)back:(id)sender {    NSString *inputString = self.inputText.text;    __weak typeof(self) weakself = self;    if (weakself.returnValueBlock) {        //将自己的值传出去,完成传值        weakself.returnValueBlock(inputString);    }    [self.navigationController popViewControllerAnimated:YES];    }@end复制代码

2、捕获方

//.m 文件#import "ViewController.h"#import "NextViewController.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UILabel *nextPassedValue;- (IBAction)next:(id)sender;@end@implementation ViewController- (void)viewDidLoad {        [super viewDidLoad];    }//点击按钮跳转到第二个界面- (IBAction)next:(id)sender {    NextViewController *nvc = [[NextViewController alloc]init];        //赋值Block,并将捕获的值赋值给UILabel    nvc.returnValueBlock = ^(NSString *passedValue){                self.nextPassedValue.text = passedValue;        };        [self.navigationController pushViewController:nvc animated:YES]; }@end复制代码

转载于:https://juejin.im/post/5a31139b5188250a5719bbb6

你可能感兴趣的文章
人物关系网络图可视化
查看>>
关于ADO.Net SqlConnection的性能优化
查看>>
docker安装及加速配置
查看>>
MRF能量优化
查看>>
什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
查看>>
Atlas Control ToolKit 发布
查看>>
世界是数字的
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
GC是什么? 为什么要有GC?
查看>>
JQuery EasyUi之界面设计——母版页以及Ajax的通用处理(三)
查看>>
童年记忆
查看>>
Selenium Python bindings 文档一
查看>>
directX的16位和24位的色彩模式
查看>>
WINDOWS 8
查看>>
ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[下篇]
查看>>
spring(10)
查看>>
Ubuntu 12.04 LTS 及ubuntu14.10 -- NFS安装
查看>>
hdu 5063 Operation the Sequence(Bestcoder Round #13)
查看>>