2012-05-01 126 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]]; 
}