UIAlertView不会调用它的方法目标c

问题描述:

这是我的代码。我正在开发一个BAC计算器应用程序。我试图添加一条警告,要求用户确认他们何时添加饮料(表明他们只是喝了一杯标准饮料)。确认后,我希望它增加BAC(这是一个全局浮点变量),然后更新显示用户的BAC(self.BACNum.text)的视图控制器上的标签。UIAlertView不会调用它的方法目标c

问题是当用户按下确定时,UIAlert没有响应。请帮忙!

- (IBAction)AddDrink:(id)sender { 
UIAlertView *addDrinkAlert = [[UIAlertView alloc] initWithTitle:@"Confirm adding one standard drink." message:@"A standard drink is 12oz beer, 5oz wine, or a 1.5 oz shot of 80 proof liquor." delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; 


[addDrinkAlert show]; 

} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 

    if (buttonIndex == 1) 
    { 

     if ([gender isEqualToString:@"Male"]) { 
      genderConst = 0.68; 
     } 
     else { 
      genderConst = 0.55; 
     } 

     BAC += (2.84)/([weight floatValue]*genderConst); 
     self.BACNum.text = [NSString stringWithFormat:@"%.3f", BAC]; 

     [NSTimer scheduledTimerWithTimeInterval: 60.0 target:self selector:@selector(metabolize:) userInfo:nil repeats: YES]; 

     [self.navigationController popViewControllerAnimated:YES]; 

     return; 
    } 

    else { 

     return; 
    } 

}

+0

将代表设置为self; – 2014-12-05 04:18:34

+0

编码为iOS版本?,如果您正在编写iOS 8,那么这将不起作用(可能是你在iOS 8模拟器中测试)。对于iOS 8使用AlertViewController(我遇到了同样的问题)。 – 2014-12-05 04:57:58

+0

看到我的答案如何使用UIAlertController – 2014-12-05 05:08:00

delegate:nil 

还有就是你的问题。你应该在这里传递一个符合UIAlertViewDelegate协议的对象并实现-alertView:clickedButtonAtIndex:方法。你的情况是self

+0

谢谢!这工作! – 2014-12-05 04:21:39

设置委托delegate:self

UIAlertView *addDrinkAlert = [[UIAlertView alloc] initWithTitle:@"Confirm adding one standard drink." message:@"A standard drink is 12oz beer, 5oz wine, or a 1.5 oz shot of 80 proof liquor." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; 


[addDrinkAlert show]; 

我都面临着同样的问题,当我有我的编译为iOS 8代码中发现很多东西我开始认识到关于为iOS 8之后,我们必须使用AlertController ,Apple从现在开始不再支持UIAlertView。这就是为什么你的alertViewDelegate方法不起作用。

请尝试下面的代码,这将工作肯定。

UIAlertController *alertController=[UIAlertController alertControllerWithTitle:@"Confirm adding one standard drink." message:@"A standard drink is 12oz beer, 5oz wine, or a 1.5 oz shot of 80 proof liquor." preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) 
            { 
             // code for OK Button click 
            }]; 
[alertController addAction:okAction]; 
[self presentViewController:alertController animated:YES completion:nil];