不调用委托方法“clickedButtonAtIndex:”

时间:2010-03-29 13:00:45

标签: iphone objective-c uialertview

我使用以下代码创建了一个包含两个按钮的警报视图:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: title 
message: msg delegate:nil cancelButtonTitle:@"Replay" otherButtonTitles:@"Highscore", nil];
[alertView show];

我希望在单击其中一个按钮时运行一些代码。 为此,我将以下方法添加到delegate.m文件中:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
 if (buttonIndex==0) //Run some code 
 else //Other code
 }

但是当我按下其中一个按钮时,不会调用此方法! 有人可以告诉我为什么吗?

提前致谢,

Sagiftw

5 个答案:

答案 0 :(得分:39)

delegate:nil

如果您指定将没有委托,警报视图如何关联委托?用

替换该部分
delegate:self

代替。

答案 1 :(得分:3)

尝试将委托设置为self而不是nil。

答案 2 :(得分:2)

我从UITextField委托方法调用UIAlertView的 dismissWithClickedButtonIndex:animated:方法,因为我也想处理键盘返回键:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField.tag == 1001) {
        [textField resignFirstResponder];
        [_alert dismissWithClickedButtonIndex:1 animated:YES];
    }
    return YES;
}

这种方法 alertView:clickedButtonAtIndex:即使您设置了正确的委托也永远不会被调用。相反, alertView:didDismissWithButtonIndex:会被调用。所以实现这个方法:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // your code here
}

如果您只想处理警报视图的按钮,那么首先调用clickedButtonAtIndex,然后调用didDismissWithButtonIndex。

答案 3 :(得分:0)

在.h中放置UIActionSheetDelegate并在.m中创建一个alertView,将委托放在self而不是nil,如上所述

答案 4 :(得分:0)

这个问题的正确答案是delegate:nil。但是如果委托已经设置为self,并且clickedButtonAtIndex仍然无法正常工作,请在显示alertview后尝试检查是否弹出另一个视图控制器([self.navigationController popViewControllerAnimated:YES];)。这也可能导致clickedButtonAtIndex未被调用。这就是发生在我身上的事。

希望这有助于某人。