- (void)alertViewCancel :( UIAlertView *)不调用alertView

时间:2010-03-15 15:26:08

标签: iphone methods delegates uialertview

我遇到的问题是当我用取消按钮取消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];
}

3 个答案:

答案 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
    }
}