ios块示例.如何创建块目标-c

Mat*_*der 2 ios objective-c-blocks

我有两个UIViewController:

  • MainVC
  • PickerVC

在主视图控制器中我有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)

zei*_*sen 7

在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如果变量在块中使用,则该语句用于保留在内存中.所以你在上面的代码中不需要它