繁体   English   中英

UIWebView似乎未加载页面

[英]UIWebView doesn't seem to be loading the page

我有一个基于导航控制器的应用程序,该应用程序下载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. 将Web视图的autoresizingMask设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight用于在调整父视图的大小时调整Web视图的大小。 这是因为默认情况下,您创建的父UIView和UIWebView都具有零帧(0,0,0,0)。 通过设置此选项,当父级在屏幕上之前调整大小时,Web视图将调整大小以匹配。
  2. 不要使用单独的UIView实例,只需将self.view设置为您的UIWebView实例。

我建议使用第二个选项,除非您确实需要在控制器内部使用另一个视图。 另外,我应该在这里指出,您在上面的代码片段中同时泄漏了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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM