我使用以下代码创建了一个包含两个按钮的警报视图:
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
答案 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)
答案 4 :(得分:0)
这个问题的正确答案是delegate:nil
。但是如果委托已经设置为self,并且clickedButtonAtIndex
仍然无法正常工作,请在显示alertview后尝试检查是否弹出另一个视图控制器([self.navigationController popViewControllerAnimated:YES];
)。这也可能导致clickedButtonAtIndex
未被调用。这就是发生在我身上的事。
希望这有助于某人。