2010-04-09 83 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];