alertView didDismissWithButtonIndex никогда не вызывался

Прошу извинить, если что-то не так... пишу первый раз.

Я видел несколько вопросов, похожих на это, но ни один из них не имел той же проблемы. Я использую IOS 6.1 и Xcode 4.6. Проблема в том, что didDismiss никогда не вызывается, а вызывается только willDismiss. Мой код ниже вместе с выводом журнала. Есть идеи?

#import "MenkLabUIAlertTestViewController.h"

@interface MenkLabUIAlertTestViewController ()

@end

@implementation MenkLabUIAlertTestViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


}
- (IBAction)test:(id)sender {
    UIAlertView *av  = [[UIAlertView alloc] initWithTitle:@"Encrypting File(s)" message:@"Please wait..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
    //    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [av show];
    [av dismissWithClickedButtonIndex:-1 animated:YES];
}

- (void) alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"willDISMIS");
}

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"didDISMIS");
   }


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Вывод журнала:

08.07.2013 17:27:04.055 testUIAlertView[10534:11303] будетDISMIS

Это всего лишь тестовое приложение, однако это точно такая же проблема, которая существует в моем текущем приложении.

Заранее спасибо. Весь день ломал голову над этим!


person Menklab    schedule 08.07.2013    source источник
comment
попробуйте отклонить с 0 вместо -1   -  person Andrew    schedule 09.07.2013
comment
См. мой ответ на странице stackoverflow.com/a/32594226/4018041.   -  person serge-k    schedule 15.09.2015


Ответы (5)


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

- (IBAction)test:(id)sender {
    self.av  = [[UIAlertView alloc] initWithTitle:@"Encrypting File(s)" message:@"Please wait..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
    [self.av show];
    [self performSelector:@selector(dismissAlertView) withObject:nil afterDelay:1];
}


-(void)dismissAlertView {
    [self.av dismissWithClickedButtonIndex:-1 animated:YES];
}

- (void) alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"willDISMIS");
}

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"didDISMIS");
}
person rdelmar    schedule 08.07.2013

Я столкнулся с аналогичной проблемой, в качестве обходного пути мы добавили метод селектора, который запускается после некоторой задержки, что вместо этого вызывает отклонение представления предупреждения. Я не уверен, почему это не работает, если мы просим предупреждение закрыть сразу после его отображения. Надеюсь, поможет.

person Anup    schedule 08.07.2013

Я тоже столкнулся с этой проблемой. Для меня это было связано с попыткой программно отклонить его с помощью индекса кнопки -1. В итоге мы пошли другим путем по другим причинам. Однако на листе действий есть указатель кнопки отмены, с помощью которого вы можете попробовать его вызвать.

person Chip Snyder    schedule 08.07.2013

Однажды я столкнулся с этой проблемой. Для меня проблема была вызвана столкновением между анимациями. Селектор didDismiss вызывается, когда анимация заканчивается. Если другая анимация запускается между willDismiss и didDismiss, то в некоторых редких случаях didDismiss не нужно вызывать.

Также обратите внимание, что это никогда не сработает, если вы попытаетесь закрыть предупреждение до того, как оно полностью отобразится.

person Sulthan    schedule 09.07.2013

Я добавил. Это решает мою проблему.

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
     {
     }
}
person Ram G.    schedule 16.09.2013