Iphone ViewController作为子视图

Iphone ViewController作为子视图,iphone,ios,ipad,uiviewcontroller,uiwebview,Iphone,Ios,Ipad,Uiviewcontroller,Uiwebview,我有一个UIViewController(DownloadManager),它下载带有UIWebView的网页,并显示下载的内容(比如pdf文件)。我想把它用作可重用的组件 我有另一个UIViewController指向一个包含4个按钮的屏幕,每个按钮应从网页下载并显示一个pdf文件。我想将下载的pdf显示为当前屏幕的嵌入式子视图。基本上不需要导航 在这里,我尝试使用DownloadManager作为子视图,并将pdf显示为子视图。工作正常 我按照屏幕一视图控制器进行阅读。但我仍然可以使用这种方

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

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

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

  • 我按照屏幕一视图控制器进行阅读。但我仍然可以使用这种方法吗

  • 我必须通过此屏幕发送电子邮件反馈。当我展示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; 
    }
    
    //************************************************
    @实现MyViewController
    -(void)initWebView
    {
    downloadMgr=[[DownLoadViewController alloc]initWithNibName:@“DownLoadViewController”捆绑包: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];
    }
    ----
    ----
    -(iAction)在主页上单击:(ui按钮*)发件人
    {
    开关(sender.tag)
    {
    案例101:
    {
    [自动停止WebViewResources];
    如果(!downloadMgr){
    [self initWebView];
    }
    downloadMgr.NavigationURL=[[NSURL alloc]initWithString:@”https://xxx.yyyyyy.com/sites/pex/iPadFiles/abc.pdf"];        
    downloadMgr.title=@“ABC”;
    [downloadMgr LoadURL];
    }
    打破
    案例120:
    {
    //通过电子邮件发送反馈
    如果([MFMailComposeViewController canSendMail])
    {
    MFMailComposeViewController*mail=[[MFMailComposeViewController alloc]init];
    mail.mailComposeDelegate=self;
    ----
    ----
    mail.modalPresentationStyle=UIModalPresentationFullScreen;
    [自我呈现ModalViewController:mail动画:是];
    }
    }
    }
    }
    -(void)mailComposeController:(MFMailComposeViewController*)控制器未完成结果:(MFMailComposeResult)结果错误:(NSError*)错误
    {   
    [自我解散Modalviewcontrolleranimated:是];
    }
    @结束
    //*****************************************************************
    @界面下载ViewController:UIViewController{
    NSURL*导航URL;
    IBOutlet myWebView*WebView;
    IBUIActivityIndicatorView*进度视图;
    NSString*下载的文件名;
    }
    
    将下载功能和显示功能分为两个不同的类要健壮得多


    理想情况下,您应该有一个类,如“Downloader”或“下载管理器”,它是
    NSObject
    的子类。此类应完成下载,并在下载完成时通知其委托人。然后,您可以拥有任意多个
    UIViewController
    s,以充分利用您的Downloader类

    将下载功能和显示分为两个不同的类要健壮得多


    理想情况下,您应该有一个类,如“Downloader”或“下载管理器”,它是
    NSObject
    的子类。此类应完成下载,并在下载完成时通知其委托人。然后,您可以拥有任意多个
    UIViewController
    s,以充分利用您的Downloader类

    好的,谢谢。我不熟悉iOS编程。我几乎处于应用程序交付的最后阶段。那么第二个案例呢。为什么在演示mail composer后MyViewController中缺少下载管理器?我想这是因为理论上您应该只有一个视图控制器,而它会变得混乱。令人惊讶的是,它一开始就工作了。视图控制器应该控制显示视图的逻辑。根据定义,专用下载管理器(理想情况下为单例)是(数据)模型层中的一个对象。下载管理器是一个包含成员的类:web视图、ActivityIndicator视图等。不了解如何使其从NSObject派生。它还有一个nib文件。在原始问题中添加下载管理器类接口。确切地说:您误解了视图控制器的概念。它应该管理数据和视图之间的关系。另一方面,下载管理器应该负责获取数据,而不是管理视图。请仔细阅读。好的,谢谢。我不熟悉iOS编程。我几乎处于应用程序交付的最后阶段。那么第二个案例呢。为什么在演示mail composer后MyViewController中缺少下载管理器?我想这是因为理论上您应该只有一个视图控制器,而它会变得混乱。令人惊讶的是,它一开始就工作了。视图控制器应该控制显示视图的逻辑。根据定义,专用下载管理器(理想情况下为单例)是(数据)模型层中的一个对象。下载管理器是一个包含成员的类:web视图、ActivityIndicator视图等。不了解如何使其从NSObject派生。它还有一个nib文件。在原始问题中添加下载管理器类接口。确切地说:您误解了视图控制器的概念。它应该管理数据和视图之间的关系。下载管理器,