2010-04-09 73 views
4

我使用下面的代碼來加載網頁。一切工作正常,但我想在完成加載網頁後停止網絡活動指示器。我們怎麼知道 網頁是完全加載的。停止網絡活動指示器

任何人都請幫忙。

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO 

NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 

回答

6

最簡單的方法是在實例化UIWebView之後添加此行。

[webView setDelegate:self]; 

現在您將撥打webViewDidFinishLoad:,整個方法應該如下所示。

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
} 

我會進一步解釋這一點,因爲您將來絕對需要了解委託。

UIWebView只是一個顯示Web數據的對象。它並不喜歡處理所有其他的東西,因爲它真的只喜歡網絡數據。現在在你的情況下,你想知道什麼時候UIWebView完成了它最喜歡的小任務。爲了做到這一點,你的UIWebView會向它的代表發出歡呼聲,比如「嗨,福爾摩斯,我現在已經完成了這個數據的加載,所以現在就去做你現在做的事吧。」並且您的UIWebView繼續其快樂的方式。

所以我們所做的是我們告訴UIWebView,它的委託,在這種情況下,通過設置webView上的delgate屬性爲我們的當前類。

從那裏你可以調用任何可用於UIWebView委託(它在文檔中的全部)的方法,並使它們執行次於UIWebView主要目的的任務。

有意義嗎?

+0

非常感謝您的解釋! 「喲福爾摩斯」爲+1,請參閱 – isarathg 2010-04-10 16:58:59

+1

。 – Jaanus 2010-04-10 18:26:17

+4

我喜歡想象所有的物體都像新鮮的空氣王子那樣說話。 – 2010-04-10 22:19:41

3

你只需要設置webView.delegate指向某個對象,並讓該對象實現webViewDidFinishLoad:

+0

你能解釋一下嗎?我是客觀的C編程的新手。 – isarathg 2010-04-09 18:40:51

0

這裏就是我用來停止活動的指標:

- (void)viewDidLoad 
{    
    [super viewDidLoad]; 

    NSString *urlAddress = [NSString stringWithFormat:@"http://www.wikipedia.com/wiki/%@", place.name];              
    NSURL *url= [NSURL URLWithString: [urlAddress stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    [webView loadRequest:requestObj]; 

    [[self webView] setDelegate:self]; 

} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [activityIndicator stopAnimating]; 
} 

- (void) webViewDidStartLoad:(UIWebView *)webView { 
    [activityIndicator startAnimating]; 
} 
0

,用來顯示網絡指示燈,而下面的代碼UIWebView的負荷要求使用..

#pragma mark - UIWebViewDelegate 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    return YES; 
} 
//For Showing NetWork Indicator in Webview 
- (void)webViewDidStartLoad:(UIWebView *)webView 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
} 
- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 

注:UIViewController<UIWebViewDelegate>[webView setDelegate:self];