在加载完整页面之前,活动指示器不会显示

时间:2010-01-20 13:47:55

标签: iphone activity-indicator

我希望在加载完整网页之前显示我的活动指示器。请帮我一些示例程序或博客。谢谢

 webView = [[UIWebView alloc] initWithFrame:webFrame];  
 webView.backgroundColor = [UIColor greenColor]; 
 [second.view addSubview:webView];

 webView.backgroundColor = [UIColor grayColor];
 webView.scalesPageToFit=YES;
 [webView release];
 NSString *urlAddress = storyLink;
 NSURL *url = [NSURL URLWithString:urlAddress];
 NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
 [webView loadRequest:requestObj];
 [(UIActivityIndicatorView *)[self navigationItem].rightBarButtonItem.customView startAnimating];

我在

中使用了上面的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {}

方法

我已在以下方法中创建了活动指标

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [super viewWillAppear:YES];

    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc]  initWithFrame:CGRectMake(0, 0, 20, 20)];
    UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
    [self navigationItem].rightBarButtonItem = barButton;   
}

对于我来说,活动idicator在3秒内被创建和销毁。我希望它显示直到网页完全加载。请帮帮我。谢谢。

3 个答案:

答案 0 :(得分:1)

请向我们展示您正在执行的活动的代码(加载网页)。只有当您的代码将控制权返回到运行循环时,UI才会更新。如果您的代码阻塞主线程(例如,使用同步NSURLConnection),活动指示器将不会开始旋转,直到您的代码完成。您必须在第二个线程中完成工作或使用异步操作。

答案 1 :(得分:1)

首先,不要两次调用[super viewWillAppear:]。只需打电话一次。其次,你是在泄漏activityIndi​​cator和barButton。

您尚未指出您已将stopAnimating电话放在何处。要执行您的建议,您需要将自己设置为webView的委托,并在webViewDidFinishLoad中停止动画:。

答案 2 :(得分:1)

您需要实现UIWebViewDelegate协议,以便在UIWebView中了解网页的加载状态:

- (void)webViewDidStartLoad:(UIWebView *)webView {
  //start animating your activity indicator here.
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
  //stop animating your activity indicator here.
}

根据这些回调调用,您可以启动/停止活动指示器。