如何从块处理程序获取UIAlertAction(UIAlertController)响应?

时间:2014-12-25 17:02:42

标签: objective-c ios8.1 uialertcontroller

我有这个代码,我希望使用UIAlertAction显示带有YES或NO响应的消息;这是我的代码:

-(void) displayAlert: (NSString *)alertTitle andMessage: (NSString *)alertMessage andViewController: (UIViewController *) viewController andTag:(int)tag {

//  create controller
UIAlertController *alertController = [UIAlertController
                                      alertControllerWithTitle:alertTitle
                                      message:alertMessage
                                      preferredStyle:UIAlertControllerStyleAlert];

//  add buttons
if(tag == 0)  {  //  ok/cancel response
    UIAlertAction *cancelAction = [UIAlertAction
                                   actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel action")
                                   style:UIAlertActionStyleCancel
                                   handler:^(UIAlertAction *action)
                                   {

                                   }];

    UIAlertAction *okAction = [UIAlertAction
                               actionWithTitle:NSLocalizedString(@"OK", @"OK action")
                               style:UIAlertActionStyleDefault
                               handler:^(UIAlertAction *action)
                               {

                               }];

    [alertController addAction:cancelAction];
    [alertController addAction:okAction];
}
else if(tag == 1)  {  //  yes/no response
    UIAlertAction *noAction = [UIAlertAction
                               actionWithTitle:NSLocalizedString(@"No", @"No action")
                               style:UIAlertActionStyleCancel
                               handler:^(UIAlertAction *action)
                               {

                               }];

    UIAlertAction *yesAction = [UIAlertAction
                                actionWithTitle:NSLocalizedString(@"Yes", @"Yes action")
                                style:UIAlertActionStyleDefault
                                handler:^(UIAlertAction *action)
                                {

                                }];

    [alertController addAction:noAction];
    [alertController addAction:yesAction];
}


//  display controller  
[viewController presentViewController: alertController animated:YES completion:nil];

}

我的问题是该块不允许返回(根据docs)。那么如何将响应返回给调用方法呢? (它不是内联的,它是一类常用的方法,因为它经常被使用)。

1 个答案:

答案 0 :(得分:2)

您无法获得阻止的返回值。相反,您可以执行以下操作:

  • 将完成块参数添加到displayAlert方法。并在此块定义中包含一个参数,该参数表示按下按钮(是/否或其他)
  • 从您已经拥有的两个块处理程序中调用此完成块,并将适当的值传递给它。

这样你的应用程序代码就可以定义一个完成块,它将在两种情况下执行(当用户点击是或否时),你可以在那里处理它。