- (void) alertViewCancel: (UIAlertView *) alertView не вызывается - PullRequest
8 голосов
/ 15 марта 2010

У меня проблема в том, что метод UIAlertViewDelegate - (void) alertViewCancel: (UIAlertView *) alertView не вызывается, когда я отменяю 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 ]

12 голосов
/ 15 марта 2010

alertViewCancel используется, когда система отклоняет ваш просмотр предупреждений, а не когда пользователь нажимает кнопку «Отмена». Цитата из яблочных документов :

При желании вы можете реализовать alertViewCancel: метод, чтобы взять соответствующее действие, когда система отменяет ваш просмотр предупреждений. Если делегат не реализует это метод, поведение по умолчанию смоделировать пользователя, нажав кнопку отмены Кнопка и закрытие вида.

Если вы хотите захватить, когда пользователь нажимает кнопку «Отмена», вы должны использовать метод clickedButtonAtIndex и убедиться, что индекс соответствует индексу для кнопки отмены. Для получения этого индекса используйте:

index = alertDone.cancelButtonIndex;
2 голосов
/ 16 марта 2010

Вы можете обработать Отмена по индексу 0 этого делегата:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0){
      //cancel button clicked. Do something here.
    }
    else{
      //other button indexes clicked
    }
}   
0 голосов
/ 17 октября 2013

Это можно улучшить двумя способами. Во-первых, он обрабатывает только тот случай, когда пользователь действительно нажал кнопку. Он не обрабатывает ситуацию, когда вызывается [myAlert dismissWithClickedButtonIndex:], или что предупреждение отключается другим способом. Во-вторых, кнопка 0 не обязательно является кнопкой отмены. В предупреждении с двумя кнопками левая находится с индексом 0, а правая с индексом 1. Если вы изменили заголовки так, что правая кнопка говорит «Отмена», то кнопка 1 логически является кнопкой Отмена. Вместо «willDismiss» вы можете реализовать «didDismiss», который будет вызываться после исчезновения диалога, а не до.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == alertView.cancelButtonIndex)
    {
      //cancel button clicked. Do something here.
    }
    else
    {
      //other button indexes clicked
    }
}   
...