2

我有两个UIViewController

  • 主VC
  • 选择器VC

在主视图控制器中,我有 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];
}
4

1 回答 1

7

在 PickerVC 的 header 中添加两个 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语句用于变量在块中使用时留在内存中。所以在上面的代码中你不需要它

于 2012-07-26T09:54:45.123 回答