您的位置:首页 > 移动开发 > IOS开发

iOS开发:使用Block在两个界面之间传值

2015-11-16 21:09 483 查看

需求

首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。

第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。

一、在第二个视图控制器的.h文件中定义声明Block属性

// 声明的Block重新定义了一个名字 ReturnTextBlock
typedef void (^ReturnTextBlock)(NSString *showText);

@interface TextFieldViewController : UIViewController
// 定义的一个Block属性
@property (nonatomic, copy) ReturnTextBlock returnTextBlock;

- (void)returnText:(ReturnTextBlock)block;

@end


二、实现第二个视图控制器的方法

- (void)returnText:(ReturnTextBlock)block {
self.returnTextBlock = block;
}
- (void)viewWillDisappear:(BOOL)animated {

if (self.returnTextBlock != nil) {
self.returnTextBlock(self.inputTF.text); // inputTF是视图中的UITextField。
}
}


第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,需要重写:
- (void)viewWillDisappear:(BOOL)animated;
方法。

三、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
TextFieldViewController *tfVC = segue.destinationViewController;

[tfVC returnText:^(NSString *showText) {
self.showLabel.text = showText;
}];
}


看代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: