1

我想声明一个将块作为参数的方法,以便在解除警报时执行,所以有如下内容。但无法找到将块参数传递给 onDismiss 部分的语法:

- (void) notifyUserOfProblemWithDismissBlock: ( (^)()) block
{
    [UIAlertView showAlertViewWithTitle: @"whatever"
                            message: nil
                  cancelButtonTitle: nil
                  otherButtonTitles:[NSArray arrayWithObject:     NSLocalizedString(@"BUTTON_OK", nil)]
                          onDismiss:^(int buttonIndex){
                              block;
                          }
                           onCancel:^ {}];
}
4

2 回答 2

1

如果您要传递兼容的块类型,则只需使用其参数名称:

...
onDismiss:theBlock
...

否则(这是您遇到的情况),将其包装到另一个块中,在该块中您调用最初作为参数传入的块:

...
onDismiss:^(int btnIdx) {
    theBlock();
}
...

此外,如果你不打算在一个块中做任何事情,如在 中onCancel:,你可以通过nilNULL那里。

于 2013-01-07T21:45:12.207 回答
1

要将名为“block”的块直接传递给 UIAlertView 方法,它需要具有与该方法期望的解除块相同的签名(相同的返回类型、编号和方法类型)。既然没有,您可以传递一个具有正确签名的块,然后在该块的主体中​​调用您的块。您快到了。您缺少的关键是调用块的语法是:

堵塞();

所以,这样做

- (void) notifyUserOfProblemWithDismissBlock:(void(^)(void)) block
{
    [UIAlertView showAlertViewWithTitle:@"whatever"
                                message:nil
                      cancelButtonTitle:nil
                      otherButtonTitles:@[NSLocalizedString(@"BUTTON_OK", @"BUTTON_OK")]
                              onDismiss:^(int buttonIndex) {
                                  block();
                              }
                               onCancel:^{}];
}
于 2013-01-07T21:47:17.060 回答