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

时间:2012-07-26 09:28:28

标签: ios objective-c-blocks

我有两个UIViewController

  • MainVC
  • PickerVC

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

1 个答案:

答案 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语句用于变量在块中使用时保留在内存中。所以你在上面的代码中不需要它