我有两个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];
    }
    

    最佳答案

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

    关于ios - ios块示例。如何创建块 objective-c ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11666310/

    10-10 19:43