1

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

 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;   
}

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

4

3 回答 3

1

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

于 2010-01-20T14:20:08.950 回答
1

首先,不要调用 [super viewWillAppear:] 两次。只需调用一次。其次,您正在泄漏 activityIndi​​cator 和 barButton。

你还没有指出你在哪里放置了 stopAnimating 调用。要执行您的建议,您需要将自己设置为 webView 的委托,并在 webViewDidFinishLoad: 中停止动画。

于 2010-01-20T14:36:50.053 回答
1

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

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

基于这些回调调用,您可以启动/停止您的活动指示器。

于 2010-01-20T20:22:25.920 回答