明明知道block是一个很重要的知识点,很久不用就又忘了,这是在网上看到的一个例子。(晚上回去整理另外的一个)
在视图A上有一个按钮(用来在点击的时候推出视图b)和一个label(用来显示从b传回来的值),在界面b上有一个文本输入框,用来输入想要传给a的文本。
具体实现的流程是:
1 在b.h中,为要声明的block重新定义一个名字ReturnTextBlock
typedef void (^ReturnTextBlock)(NSString *text);//这是定义block的格式,(^ReturnTextBlock)里是block的名字,以^作为标志。(NSString *text)是传入的参数.然后定义一个block属性,@property(nonatomic,copy)ReturnTextBlock returnTextBlock;//用来保存传进来的block语句。然后寻找一个合适的时机调用.
-(void)returnText:(ReturnTextBlock) block;//是一个在第一个界面传进来一个Block语句块的函数,
在b.m中,实现方法与找到合适的时机来调用你传进来的block
-(void)returnText:(ReturnTextBlock)block{2⃣️
self.returnTextBlock = block;//把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用
}
-(void)viewWillDisappear:(BOOL)animated{3⃣️
if (self.returnTextBlock != nil) {
self.returnTextBlock(self.textField.text);4⃣️
}
}
2、在a.m中
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{1⃣️
BViewController *bvc = segue.destinationViewController;
[bvc returnText:^(NSString *text) {2⃣️4⃣️
self.textLabel.text = text;
}];
}