ビューを表示するビューコントローラーのプロパティを宣言します。その後
@interface DownloadViewController : UIViewController
{
UIAlertView *downloadAlertView;
}
@property (retain) UIAlertView *downloadAlertView;
@end
あなたがエラーを検出したときに、(これはダウンロードを行っているオブジェクトによって、このビューコントローラへの参照を維持するあなたが必要となります)ビューコントローラのdownloadAlertViewプロパティを設定します。あなたのDownloadViewController
実装に続いて
- (void)downloadFailed
{
UIAlertView *alertView = [[[UIAlertView alloc] init] autorelease];
alertView.title = @"Download Failed";
downloadViewController.downloadAlertView = alertView;
}
、
- (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;
}
}
クイック説明:
- 最初の2つの方法は、標準的なゲッター/セッターですが、セッターは、ロジックを追加しました、もしそうView Controllerが現在表示されている場合は、アラートがすぐに表示されます。
- の場合、アラートビューはビューコントローラによって保存され、ビューが表示されるとすぐに表示されます。
ニースアプローチ。私はそれですが、 '(viewController.isViewLoaded && viewController.view.window)'条件付きの説明はできますか? '(self.navigationController.visibleViewController == self)'と同じですか? –
コードdownloadAlertViewでself.downloadAlertViewを参照してはいけませんか? –
setterの名前を確認します.setDownloadAlertViewにする必要があります。 –