0

我有一个UIViewController(DownloadManager)下载网页UIWebView并显示下载的内容(比如pdf文件)。我想将它用作可重用组件。

我有另一个UIViewController指向一个包含 4 个按钮的屏幕,每个按钮应该从网页下载并显示一个 pdf 文件。我想将下载的 pdf 作为嵌入式子视图显示到当前屏幕。基本上不想导航。

在这里,我尝试使用 DownloadManager 作为子视图并将 pdf 显示为子视图。它工作正常。

  1. 我读为每屏幕一个视图控制器。但是我仍然可以使用这种方法吗?

  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

将下载功能和显示分成两个不同的类会更加健壮。

理想情况下,您应该有一个像“ Downloader ”或“ Download Manager ”这样的类,它是NSObject. 此类应进行下载并在完成后通知其委托。然后,您可以拥有任意数量的UIViewControllers,以利用您的 Downloader 类。

于 2012-06-22T08:42:36.250 回答