未调用委托方法“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:”的主要内容,如果未能解决你的问题,请参考以下文章