UIWebView似乎没有加载页面

时间:2009-05-28 19:25:21

标签: iphone objective-c uiwebview

我有一个基于导航控制器的应用程序,可以下载RSS源并在TableView中列出项目标题。那部分有效。当我点击文章标题时,我想将FeedArticleController的一个实例推送到导航堆栈。 FeedArticleController loadView方法设置视图(因为我想学习如何以编程方式而不是使用IB)。这是loadView:

- (void)loadView {
    UIView *view = [[UIView alloc] init];
    self.view = view;

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    webView.delegate = self;

    [view addSubview:webView];
}

这有意义吗? 现在,为了使webView实际加载页面,我有这个viewDiDLoad方法:

- (void)viewDidLoad {
    [super viewDidLoad];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; 
}

然后我有委托方法,webViewDidStartLoad和webViewDidFinishLoad。他们只是打印到NSLog。

我是否遗漏了构建和添加视图的内容?委托方法似乎在延迟后打印到日志,并且在实例化webView时线路上有流量。所以,我认为它正在加载页面,但没有显示?

谢谢你们。

1 个答案:

答案 0 :(得分:3)

这里有两件事要讨论:

  1. 将网络视图的autoresizingMask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight,以便在调整其父级大小时调整Web视图大小。这是因为默认情况下,您创建的父UIView和UIWebView都有零帧(0,0,0,0)。通过设置此项,当在进入屏幕之前调整父级的大小时,将调整Web视图的大小以匹配。
  2. 不要使用单独的UIView实例,只需将self.view设置为UIWebView实例。
  3. 我建议使用第二个选项,除非你真的需要控制器内的另一个视图。另外,我应该在这里指出你在上面的代码片段中泄漏了UIView和UIWebView。这可能会简化,但如果不是,则应在分配后释放视图。以下是实施上述解决方案2的示例:

    - (void) loadView
    {
        webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
        webView.delegate = self;    // weak reference: doesn't retain self
        self.view = webView;        // strong reference: retains webView
        [webView release];          // release initial reference: now 'owned' through self.view
    }