我有两个 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/