Вопрос

У меня проблема: метод 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];
}
Это было полезно?

Решение

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

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

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

index = alertDone.cancelButtonIndex;

Другие советы

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

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

Это можно улучшить двумя способами.Во-первых, он обрабатывает только тот случай, когда пользователь действительно нажал кнопку.Он не обрабатывает ситуацию, когда вызывается [myAlert DisclaimWithClickedButtonIndex:] или что предупреждение отклоняется каким-либо другим способом.Во-вторых, кнопка 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
    }
}   
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top