我有两个UIViewController
:
在主视图控制器中我有IBAction方法: - showPickerView
在这个方法中,我需要创建一个块来显示PickerVC视图并等待我,同时在PickerVC视图中选择一些值并按下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];
}
答案 0 :(得分:7)
在PickerVC的标题中添加两个typedef
typedef void (^FinishBlock)();
typedef void (^FailedBlock)();
并且你的setFinishedBlock声明采用了FinishBlock
- (void)setFinishBlock:(FinishBlock)finishBlock;
- (void)setFailedBlock:(FailedBlock)failedBlock;
为每个块制作一个iVar
@interface PickerVC : UIViewController
{
FinishBlock _finishBlock;
FailedBlock _failedBlock;
}
在setFinishedBlock:
和setFailedBlock:
的定义中,将参数设置为iVars
PickerVC失败或完成致电_failedBlock
或_finishedBlock
。
__block
语句用于变量在块中使用时保留在内存中。所以你在上面的代码中不需要它