App Browser not loading?

我想创建一个自定义的应用内浏览器来显示它在我的应用程序内。

我的架构看起来像这样:UIViewController的子类:从它的笔尖加载的uiviewcon:

  • UIWebView的
  • 顶部和底部栏与UI元素,如向前,后退,...
  • 在我实例化了uiviewcon之后,我对它调用了以下方法:

    -(void)loadrequest:(NSURLRequest *)urlrequest{
        [webView loadRequest:urlrequest];
    }
    

    webview是我的笔尖中的UIWebView的IBOutlet。 然而,似乎webView是零(我通过if(webView)检查...,并且我已经将它连接到了IB)

    我的webView没有被隔离的可能原因是什么? 我已经在uiviewcon中实现了UIWebViewDelegate协议的一些方法(将uiviewcon的viewDidLoad中的self设置为delegate),但这些方法都没有被调用(因为webView为零,所以看起来很合理)。

    我该如何改进我的代码,以便我的浏览器最终加载一些东西?

    编辑:我的uiviewcon标题:

    @protocol CustomWebViewDelegate
    -(void)hidecustomwebview;
    @end
    
    @interface CustomWebView : UIViewController<UIWebViewDelegate> {
        UIActivityIndicatorView *spinner;
        UIWebView *webView;
    }
    @property (nonatomic, retain) IBOutlet UIActivityIndicatorView *spinner;
    @property (nonatomic, retain) IBOutlet UIWebView *webView;
    @property (nonatomic,assign) id <CustomWebViewDelegate>delegate;
    -(void)webViewDidStartLoad:(UIWebView *)webView;
    -(void)webViewDidFinishLoad:(UIWebView *)webView;
    -(void)loadrequest:(NSURLRequest *) urlrequest;
    -(IBAction)hideme;
    @end
    

    您的视图元素仅在需要时才实例化。 这意味着对控制器view属性的第一次引用(从UIKit内部引用或在代码中的任何位置引用'self.view')会触发实际创建您的笔尖中所有元素的过程。

    因此,直到上述过程发生,您的webView属性将为零。 在实例化视图之前,最有可能调用loadRequest 。 解决您的问题的方法是在调用loadRequest时简单地进行更改。

    那么调用loadRequest的正确时间是什么? 有三种可能性:

    1)如果您从CustomWebView中调用loadRequest,则可以将该代码放在viewDidLoad

    2)如果您必须从CustomWebView的外部调用loadRequest,您可以等待第一次呈现该控制器(例如使用presentModalViewController:animated:或将您的控制器推到导航堆栈上),然后调用loadRequest。

    所以你的代码看起来像这样:

    NSURLRequest *someRequest = nil; //Assume this has some valid value
    
    CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
    [self presentModalViewController:myWebView];
    [myWebView loadRequest:someRequest];                     //View has been created, 
                                                             //loadRequest will work.
    

    而不是原本可能的:

    NSURLRequest *someRequest = nil; //Assume this has some valid value
    
    CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
    [myWebView loadRequest:someRequest];                     //Your view is not created yet, loadRequest won't work.
    [self presentModalViewController:myWebView];             
    

    3)如果你不能完成上述操作,并且无论何时选择呈现presentModalViewControllerpushViewController ,都可以在任何时间点调用loadRequest,总有一天可以保存:)

    hack是,只需在你的CustomWebView的init方法中引用self.view ,你就可以确信视图已经在'init'后面设置好了。 不管你如何引用self.view ,甚至像[self.view setNeedsLayout]这样的东西都可以。 就像我说的那样,没关系。

    这是一个相当简单的问题,但我想在这里列出所有的选项,因为这是我以前犯的一个相当常见的错误。


    您是否已将UIWebView小部件连接到Interface Builder窗口中的webView插座? 如果没有看到这个页面如何做到这一点。

    当您调用loadRequest方法时,您还应该小心。 一个安全的地方是viewDidLoad方法,你可以保证IBOutlet是有线的。

    链接地址: http://www.djcxy.com/p/34781.html

    上一篇: App Browser not loading?

    下一篇: Pushing UIWebView onto UIViewController