Mat*_*der 2 ios objective-c-blocks
我有两个UIViewController:
在主视图控制器中我有IBAction方法: - showPickerView
在这个方法中,我需要创建一个块来显示PickerVC视图并等待我,同时在PickerVC视图中选择一些值并按下Done按钮.
在这个块中,我需要实现回调,在按下Done按钮后将调用MainVC中的方法.
所以,我之前使用过block,但我不知道如何自己实现它.
我认为第一部分将如下所示:
- (IBAction)showPickerView {
__block PickerVC *pickerVC = [[PickerVC alloc] init];
[pickerVC setFinishBlock:^{
// Do something after user press on Done button
}];
[pickerVC setFailedBlock:^{
// Do something if something wrong (but this method optional)
}];
[pickerVC showPicker];
}
Run Code Online (Sandbox Code Playgroud)
在PickerVC的头文件中添加两个typedef
typedef void (^FinishBlock)();
typedef void (^FailedBlock)();
Run Code Online (Sandbox Code Playgroud)
并且你的setFinishedBlock声明采用了FinishBlock
- (void)setFinishBlock:(FinishBlock)finishBlock;
- (void)setFailedBlock:(FailedBlock)failedBlock;
Run Code Online (Sandbox Code Playgroud)
为每个块制作一个iVar
@interface PickerVC : UIViewController
{
FinishBlock _finishBlock;
FailedBlock _failedBlock;
}
Run Code Online (Sandbox Code Playgroud)
在您的定义中setFinishedBlock:,setFailedBlock:将参数设置为iVars
一旦PickerVC失败或完成呼叫_failedBlock或_finishedBlock.
__block如果变量在块中使用,则该语句用于保留在内存中.所以你在上面的代码中不需要它
| 归档时间: |
|
| 查看次数: |
4359 次 |
| 最近记录: |