我想声明一个方法,该方法将一个块作为参数,以便在解除警报时执行,因此具有如下内容。 但无法点击将block参数传递给onDismiss部分的语法:
- (void) notifyUserOfProblemWithDismissBlock: ( (^)()) block
{
[UIAlertView showAlertViewWithTitle: @"whatever"
message: nil
cancelButtonTitle: nil
otherButtonTitles:[NSArray arrayWithObject: NSLocalizedString(@"BUTTON_OK", nil)]
onDismiss:^(int buttonIndex){
block;
}
onCancel:^ {}];
}
答案 0 :(得分:1)
如果您正在传递兼容的块类型,那么只需使用其参数名称:
...
onDismiss:theBlock
...
否则(这是你加入的情况),将其包装到另一个块中,在该块中调用最初作为参数传入的块:
...
onDismiss:^(int btnIdx) {
theBlock();
}
...
此外,如果您不打算在某个区块中执行任何操作,例如onCancel:
,则可以在nil
或NULL
处传递。
答案 1 :(得分:1)
要将名为'block'的块直接传递给UIAlertView方法,它需要具有与该方法对其解雇块所期望的相同的签名(相同的返回类型,numuber和方法类型)。因为它没有,你可以传递一个具有正确签名的块,然后在那个块的主体中,调用你的块。你快到了。您缺少的关键是调用块的语法是:
块();
所以,这样做
- (void) notifyUserOfProblemWithDismissBlock:(void(^)(void)) block
{
[UIAlertView showAlertViewWithTitle:@"whatever"
message:nil
cancelButtonTitle:nil
otherButtonTitles:@[NSLocalizedString(@"BUTTON_OK", @"BUTTON_OK")]
onDismiss:^(int buttonIndex) {
block();
}
onCancel:^{}];
}