iOS传值-反向传值-使用block(代码块)

代码块:是一种OC的一种数据类型,在iOS4时被引入,具有匿名函数的特性。它可以保存一段代码,并在合适的时候取出来调用。

场景:  FirstViewController 跳转到SecondViewController, 然后又跳转回 FirstViewController,并带回SecondViewController中的数据.

步骤一:在SecondViewController.h文件中定义一个block

typedef void (^SecondBlock)(NSString*text);

步骤二:同样在SecondViewController.h声明一个SecondBlock的实例变量

@property (nonatomic, copy) SecondBlock secondBlock;

//注:因为block一开始是放在栈上的,使用copy修饰目的是防止在创建block时候的作用域外面调用block 而导致程序崩溃。同时为了能够在block的声明域外使用,所以才会要把block拷贝(copy)到堆。

步骤三:当SecondViewController要消失前,检查一下secondBlock是否在作用域外部被引用。如果是,发送数据。

if (self.secondBlock) {

    self.secondBlock(_text.text);

}

以上工作做好之后,接下来就是调用。

当FirstViewController进入SecondViewController之前,调用secondBlock等待回调

__weak typeof(self) weakSelf = self;

SecondViewController* second = [[SecondViewController alloc]init];

second.secondBlock = ^(NSString* text) {

weakSelf.showLabel.text = text;

};

效果如下:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容