UIWebView似乎没有加载页面
问题描述:
我有一个基于导航控制器的应用程序下载一个RSS提要,并在一个TableView中的项目标题。该部分起作用。当我点击文章标题时,我想将FeedArticleController的实例推送到导航堆栈上。 FeedArticleController loadView方法设置视图(因为我想学习如何以编程方式而不是使用IB)。这里的loadView:UIWebView似乎没有加载页面
- (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实例化时线路上存在流量。所以,我认为这是加载页面,但没有显示?
谢谢你们。
答
有寻找到这里两件事情:
- 设置Web视图的
autoresizingMask
到UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
使Web视图调整大小时,其父被调整。这是因为默认情况下,您创建的父UIView和UIWebView都具有归零帧(0,0,0,0)。通过设置这一点,当父屏幕在屏幕上前调整大小时,网页视图将被调整大小以匹配。 - 不要使用单独的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
}
感谢您的评论。我并不总是确定是否应该在创建它的方法或类的dealloc方法中释放实例。 – Georges 2009-05-29 16:59:35