未调用委托方法“clickedButtonAtIndex:”

Posted

技术标签:

【中文标题】未调用委托方法“clickedButtonAtIndex:”【英文标题】:The delegate method "clickedButtonAtIndex:" is not called 【发布时间】:2010-03-29 13:00:45 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:
delegate:nil

如果您指定没有委托,警报视图将如何关联委托?将该部分替换为

delegate:self

改为。

【讨论】:

谢谢我也忘记了。【参考方案2】:

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

【讨论】:

【参考方案3】:

我从 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。

【讨论】:

【参考方案4】:

在 .h 中放入 UIActionSheetDelegate 并在 .m 中创建 alertView 时将委托设置为 self 而不是在上述情况下完成

【讨论】:

【参考方案5】:

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

希望这对某人有所帮助。

【讨论】:

以上是关于未调用委托方法“clickedButtonAtIndex:”的主要内容,如果未能解决你的问题,请参考以下文章

未调用委托方法

未调用 SWTableViewCell 委托方法

AVAudioPlayer 和 AVAudioRecorder:未调用委托方法

未调用委托方法

未调用 TextField 委托方法

未调用委托方法“clickedButtonAtIndex:”