我遇到的问题是当我用取消按钮取消AlertView时,UIAlertViewDelegate方法 - (void)alertViewCancel:(UIAlertView *)alertView 没有被调用。
奇怪的是委托方法 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 工作正常。
有没有人有想法?
提前致谢
肖恩
- (void)alertViewCancel:(UIAlertView *)alertView
{
if(![self aBooleanMethod])
{
exit(0);
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//some code
}
单击按钮时调用此方法:
- (void)ImagePickDone
{
UIAlertView *alertDone = [[UIAlertView alloc]
initWithTitle:@"Done"
message:@"Are u sure?"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles: @"Yes", nil];
[alertDone show];
[alertDone release];
}
答案 0 :(得分:12)
alertViewCancel用于系统解除警报视图时,而不是用户按下“取消”按钮时。引自apple docs:
您可以选择实施 alertViewCancel:采取的方法 系统时采取适当的行动 取消您的提醒视图。如果 委托不实现这一点 方法,默认行为是 模拟用户点击取消 按钮并关闭视图。
如果要在用户按下“取消”按钮时捕获,则应使用clickedButtonAtIndex方法并检查索引是否与取消按钮的索引相对应。要获得此索引,请使用:
index = alertDone.cancelButtonIndex;
答案 1 :(得分:2)
您可以在此委托的索引0处理取消:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0){
//cancel button clicked. Do something here.
}
else{
//other button indexes clicked
}
}
答案 2 :(得分:0)
这可以通过两种方式改进。首先,它只处理用户实际点击按钮的情况。它不处理调用[myAlert dismissWithClickedButtonIndex:]的情况,或者以其他方式解除警报的情况。其次,按钮0不一定是取消按钮。在带有两个按钮的警报中,左边的按钮位于索引0,右边的按钮位于索引1处。如果更改了标题以使右按钮显示“取消”,则按钮1在逻辑上为“取消”按钮。您可以实现“didDismiss”而不是“willDismiss”,它将在对话框消失后调用,而不是之前调用。
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == alertView.cancelButtonIndex)
{
//cancel button clicked. Do something here.
}
else
{
//other button indexes clicked
}
}