2012-05-01 46 views
3

我想知道我的WebView何时完成加载页面。我对此很新,我想知道你是否有任何建议。我需要在页面加载时创建一个“加载屏幕”。这是我的基本代码:UIWebView,确定页面是否已加载

- (void)viewDidLoad { 


NSString *urlAddress = @"http://google.se"; 

//Create a URL object. 
NSURL *url = [NSURL URLWithString:urlAddress]; 

//URL Requst Object 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

//Load the request in the UIWebView. 
[webView loadRequest:requestObj]; 
} 

谢谢!

+0

http://stackoverflow.com/questions/933414/deferring-viewwillappe的潜在副本AR-直到-webviewdidfinishload – zero0cool

回答

8

还有两个当视图加载完成,成功加载和加载失败时出现不同的回调。它们都是UIWebViewDelegate protocol的一部分。

实现它并将自己设置为Web视图的代理。然后实现

- (void)webViewDidFinishLoad:(UIWebView *)webView 

知道什么时候加载完成,这样就可以删除您的加载屏幕,并实现

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 

知道,如果它失败了,这样就可以显示和适当的消息给用户而不是无限加载屏幕。

3

看看UIWebViewDelegate Protocoll。如果你设置你的代表,你会收到像– webViewDidFinishLoad:

这就是你想要的消息,不是吗?

0

我对DOM有很差的经验,但经过一番搜索之后,我发现document.readyState是不错的选择。

从W3Schools的:

定义和用法 readyState属性返回当前文档(加载)状态。

此属性返回四个值之一:

初始化 - 还没有开始加载但 装载 - 是否加载 互动 - 装入足够,并且用户可以交互它 完成 - 满载

所以我用这个知道UIWebView何时加载文档:

- (void)readyState:(NSString *)str 
{ NSLog(@"str:%@",str); 

if ([str isEqualToString:@"complete"]||[str isEqualToString:@"interactive"]) { 
    NSLog(@"IT HAS BEEN DONE"); 
    [pageLoadingActivityIndicator stopAnimating]; 
} 

} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
//other code... 
[self readyState:[browserWebView stringByEvaluatingJavaScriptFromString:str]]; 
}