ViewController作为子视图

时间:2012-06-22 08:33:26

标签: iphone ios ipad uiviewcontroller uiwebview

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

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

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

  1. 我在每个屏幕上看到一个View Controller。但是我仍然可以使用这种方法吗?

  2. 我必须从此屏幕发送电子邮件反馈。一旦我呈现MFMailComposeViewController,之前的下载管理器子视图就会在技术上消失这里发生了什么?

  3. 请在下面找到代码段:

    //************************************************
    @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; 
    }
    

1 个答案:

答案 0 :(得分:4)

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

理想情况下,您应该拥有“下载程序”或“下载管理器”这样的类,它是 NSObject 的子类。此类应完成下载并在完成后通知其委托。然后你可以拥有尽可能多的UIViewController s利用你的Downloader类。

相关问题