关于_block操作

来源:互联网 发布:qq三国100js单刷过关 编辑:程序博客网 时间:2024/05/16 02:04
A类对应的一个界面,现在需要更新下数据,需要到跳转到B界面去取数据。虽然委托和通知两种方法都能用了,但是回调更加简单。

B类里要做的:
我先在B中设置好回调块 typedef void (^TimePickerBlock)(); 放在B.h文件夹的@interface声明之外,然后在B.h下声明一个块对象
@property (nonatomic, copy) TimePickerBlock timePickerblock;//回调
其中^(块名)(代表有参数),TimePickerBlock是自己取的一个块名。

再到B.m中设置返回A界面的那个促发方法中,设置self.timePickerblock(sender); 其中sender就是我要传递回去的数据。
传递回去的数据应该跟A中声明的类型是一样的。

A里面要做的:
在A中声明 B *bb 成员。初始化后使用方式:
bb.timePickerblock = ^(参数类型  参数名称){
//在这里可以使用你获取的参数,做你想做的事情
}

其中timePickerblock就是在B中声明的块成员;


整个运行机制是:
在A中,
bb.timePickerblock = ^(NSString *strTime){
        //在这里可以使用你获取的参数,做你想做的事情
        NSLog(@"ehe time = %@",strTime);
        [self.btnTime  setTitle:strTime forState:UIControlStateNormal];
    };
[self.view addSubview:bb.view];

第一句只是一个块赋值,括号里面的语句不会运行,第二句是将bb.view设置为当前顶层view。
然后就是B来控制操作了。当在B上进行完了相应的操作,促发到要切换为A界面的时候,会同时促发self.timePickerblock(strTemp)块函数传递数值给A:
- (IBAction)clickBack:(id)sender {
    
    NSString *strTemp = [NSString stringWithFormat:@"%@:%@",strHour,strMin];
    self.timePickerblock(strTemp);
    
    [self.view removeFromSuperview];
}

然后A中的快函数就能执行了。输出ehe time = *

0 0