Задержка представления UIAlertView, пока не отобразится связанный с ним viewController - PullRequest
0 голосов
/ 14 марта 2012

У меня загрузка в фоновом режиме.Он показывает UIAlertView при некотором состоянии сбоя.

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

Могу ли я отложить представление UIAlertView до того момента, когда пользователю будет показан viewController, с которым он связан (вызван метод viewDidAppear)?

1 Ответ

2 голосов
/ 14 марта 2012

Объявите свойство на контроллере представления, которое вы хотите показать представление.

@interface DownloadViewController : UIViewController
{
    UIAlertView *downloadAlertView;
}

@property (retain) UIAlertView *downloadAlertView;

@end

Затем, когда вы обнаружите ошибку, установите свойство downloadAlertView контроллера представления (это потребует от вас сохранения ссылки на этот контроллер представления объектом, выполняющим загрузку).

- (void)downloadFailed
{
    UIAlertView *alertView = [[[UIAlertView alloc] init] autorelease];
    alertView.title = @"Download Failed";
    downloadViewController.downloadAlertView = alertView;
}

Тогда в вашей DownloadViewController реализации,

- (UIAlertView *)downloadAlertView
{
    return downloadAlertView;
}

- (void)setDownloadAlertView:(UIAlertView *)aDownloadAlertView
{
    // standard setter
    [aDownloadAlertView retain];
    [downloadAlertView release];

    downloadAlertView = aDownloadAlertView;

    // show the alert view if this view controller is currently visible
    if (viewController.isViewLoaded && viewController.view.window) 
    {
         [downloadAlertView show];
         downloadAlertView = nil;
    }
}

- (void)viewDidAppear
{
    if (downloadAlertView)
    {
        [downloadAlertView show];
        downloadAlertView = nil;
    }
}

Быстрое объяснение:

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