ios block传值

iOS block传值
首先创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器通过block传过来的值。button是点击跳转到第二个控制器。
第二个控制器 里面有一个UITextField 是用来输入文字用的。

// 第一个控制器 UILabel 和 UIButton
- (void)addViews {

    self.labels = [[UILabel alloc]init];
    self.labels.backgroundColor = [UIColor redColor];
    self.labels.frame = CGRectMake(100, 100, 200, 40);

    [self.view addSubview:self.labels];

    self.buttons = [UIButton buttonWithType:UIButtonTypeCustom];
    self.buttons.frame = CGRectMake(100, 200, 50, 30);
    self.buttons.backgroundColor = [UIColor blackColor];
    [self.buttons addTarget:self action:@selector(actionss) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.buttons]; 
}
- (void)actionss
{
// 回调block
// 在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性
    SecondController *second = [[SecondController alloc]init];
    [second returnText:^(NSString *showText) {
        self.labels.text = showText;
    }];

    [self presentViewController:second animated:YES completion:nil];
}

// 第二个控制器
typedef void(^ReturnTextBlock)(NSString *showText);// 给block重新定义一个名字
@interface SecondController : UIViewController

@property (nonatomic, copy)ReturnTextBlock returnTextBlock; // 定义block属性

- (void)returnText:(ReturnTextBlock)block; // 是一个在第一个界面传进来一个Block语句块的函数,不用也可以,不过加上会减少代码的书写量
// 方法实现
// 第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,
- (void)returnText:(ReturnTextBlock)block
{
    self.returnTextBlock = block;
}

- (void)viewWillDisappear:(BOOL)animated
{
    if (self.returnTextBlock != nil) {
        self.returnTextBlock(self.textFields.text);
    }
}

你可能感兴趣的:(ios,block,传值)