iOS - UIAlertView закрывается раньше ожидаемого - PullRequest
1 голос
/ 16 августа 2011

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

- (IBAction) goToPhotoViewControllerView:(id) sender{

    alert = [[UIAlertView alloc] initWithTitle:@"Por favor, aguarde" message:@"Carregando imagens" 
                                  delegate:nil 
                         cancelButtonTitle:nil 
                         otherButtonTitles:nil];
    [alert show];

    if(alert != nil) {
        UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

        indicator.center = CGPointMake(alert.bounds.size.width/2, alert.bounds.size.height-45);
        [indicator startAnimating];
        [alert addSubview:indicator];
        [indicator release];
    }

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

    //Do a lot of stuff here

        PhotoViewController *photoViewControllerView = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil];

        [iosDao selectComics];

        [photoViewControllerView startWithComic:[[iosDao.comics lastObject] idComic] numPanels:[[[iosDao.comics lastObject] panels] count]];
        photoViewControllerView.navigationItem.title = @"Comics";

        [iosDao release];
        [[self navigationController] pushViewController:photoViewControllerView animated:YES];

        [alert dismissWithClickedButtonIndex:0 animated:YES];
        [alert release];
    });
}

В результате происходит то, что большую часть времени весь асинхронный код выполняется, отклоняя сообщение с предупреждением.Однако после того, как предупреждающее сообщение отклонено, экран все еще остается замороженным в течение приблизительно 2 или 3 секунд, прежде чем он перейдет к следующему viewController (photoViewControllerView).Я понятия не имею, почему это происходит.Я хочу, чтобы предупреждающее сообщение оставалось включенным столько, сколько необходимо.Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Вы должны просто представить представление оповещения и назначить себя в качестве его делегата, а затем, когда вы получите уведомление о том, что представление оповещения отклонено (через alertView: didDismissWithButtonIndex: метод делегата), выполните оставшуюся часть кода.

1 голос
/ 16 августа 2011

Так что, мне кажется, проблема в том, что PhotoViewController требует времени для загрузки (можете ли вы использовать инструменты для подтверждения?).Поскольку PhotoViewController является вашим собственным классом, вы можете иметь его делегатом, сделать контроллер основного вида (тот, который отклоняет UIAlert) делегатом экземпляра PhotoViewController, и заставить PhotoViewController вызвать делегата, чтобы сообщить ему, когда он будет готов и / иливидимый, например, в конце

- (void)viewWillAppear:(BOOL)animated
...