ios block 示例。如何创建 block objective-c

标签 ios objective-c-blocks

我有两个 UIViewController:

  • 主VC
  • PickerVC

在主视图 Controller 中,我有 IBAction 方法: - 显示选择器 View

在这种方法中,我需要创建 block 来呈现 PickerVC View 并等待我在 PickerVC View 上选择一些值并按下完成按钮。

在此 block 中,我需要实现回调,在我按下“完成”按钮后调用 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的header中添加两个typedef

typedef void (^FinishBlock)();
typedef void (^FailedBlock)();

并且您的 setFinishedBlock 声明采用了 FinishBlock

- (void)setFinishBlock:(FinishBlock)finishBlock;
- (void)setFailedBlock:(FailedBlock)failedBlock;

为每个 block 创建一个 iVar

@interface PickerVC : UIViewController
{
  FinishBlock _finishBlock;
  FailedBlock _failedBlock;
}

setFinishedBlock:setFailedBlock: 的定义中,将参数设置为 iVars

一旦 PickerVC 失败或完成调用 _failedBlock_finishedBlock

__block 语句用于让变量在 block 中使用时保留在内存中。所以你在上面的代码中不需要它

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

相关文章:

ios - NSAttributedString 到 NSString UTF-8

ios - 分配 block 属性时发送到实例的无法识别的选择器

ios - 使用 block 或 NSOperation 加载图像?

ios - 在 block 中分配NSString变量时出错

objective-c - 如何在 c++ lambda 调用中正确捕获 Obj-C block ?

ios - 无法使用带 Cardboard SDK 的 Kudan AR Unity 插件在 iOS 应用程序上渲染视频纹理

ios - 核心数据不会自动处理逆关系

objective-c - 传入自定义选择器实现

ios - 在 Xcode 中使用 bash 的编译标志

ios - swift xcode 错误 : Thread 1 signal SIGABRT "instantiated view controller from storyboard but didn' t get a UITableView