0

Webページをダウンロードしてダウンロードしたコンテンツ(PDFファイルなど)を表示するものUIViewController(DownloadManager)があります。UIWebView再利用可能なコンポーネントとして使いたいです。

私は、UIViewController各ボタンがWebページから1つのPDFファイルをダウンロードして表示する必要がある4つのボタンを含む画面を指している別のものを持っています。ダウンロードしたPDFを現在の画面に埋め込まれたサブビューとして表示したい。基本的にナビゲーションは必要ありません。

ここでは、DownloadManagerをサブビューとして使用し、PDFをサブビューとして表示しようとしました。その正常に動作します。

  1. 画面ごとに1つのViewControllerと読みました。しかし、それでもこのアプローチを使用できますか?

  2. この画面からフィードバックをメールで送信する必要があります。MFMailComposeViewControllerを提示するとすぐに、以前のダウンロードマネージャーのサブビューが消えます。技術的には、ここで何が起こっているのでしょうか。

以下のコードスニペットを見つけてください。

//************************************************
@implement MyViewController

- (void) initWebView
{
    downloadMgr = [[DownLoadViewController alloc] initWithNibName:@"DownLoadViewController" bundle:nil];

    downloadMgr.view.frame = CGRectMake(140, 20, 300, 200);
    downloadMgr.WebView.frame = CGRectMake(140, 20, 300, 200);

    downloadMgr.view.backgroundColor = [UIColor whiteColor];
    downloadMgr.WebView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:downloadMgr.view];
    [self.view addSubview:downloadMgr.WebView];
}

----
----

- (IBAction)onHomeClick:(UIButton *)sender 
{
    switch (sender.tag) 
    {
        case 101: 
            {
                [self stopWebViewResources];
                if (!downloadMgr) {
                    [self initWebView];
                }
                downloadMgr.NavigationURL = [[NSURL alloc] initWithString:@"https://xxx.yyyyyy.com/sites/pex/iPadFiles/abc.pdf"];        
                downloadMgr.title = @"ABC";
                [downloadMgr LoadURL];
            }
            break;

case 120:
        {
            //Send feedback via email
            if ([MFMailComposeViewController canSendMail]) 
            {
                MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
                mail.mailComposeDelegate = self;

                ----
                ----

                mail.modalPresentationStyle = UIModalPresentationFullScreen;
                [self presentModalViewController:mail animated:YES];
            }
        }
    }
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    [self dismissModalViewControllerAnimated:YES];
}

@end
//*****************************************************************


@interface DownLoadViewController : UIViewController <MyWebViewDelegate>{
    NSURL*                            NavigationURL;
    IBOutlet myWebView*              WebView;

    IBOutlet UIActivityIndicatorView* ProgressView;
        NSString*                         DownloadedFileName; 
}
4

1 に答える 1

4

ダウンロード機能と表示を2つの異なるクラスに分離する方がはるかに堅牢です。

理想的には、のサブクラスである「 Downloader」や「DownloadManager 」のようなクラスが必要ですNSObjectこのクラスはダウンロードを実行し、ダウンロードが完了したらデリゲートに通知する必要があります。UIViewController次に、Downloaderクラスを利用して、好きなだけ多くのを使用できます。

于 2012-06-22T08:42:36.250 に答える