9

我想知道如何在基于 WebView 的应用程序中实现 activityIndi​​cator,我编写了以下代码,但指标没有出现。

webview在本地加载文件,因此加载速度非常快,但是当它加载外部页面时加载速度很慢,我需要指示器...

第一视图控制器.h

 #import <UIKit/UIKit.h>

 @interface FirstViewController : 
 UIViewController <UIWebViewDelegate>{
    IBOutlet UIWebView *webview1;   
    NSURL *urlLocation;     
    IBOutlet UIActivityIndicatorView *m_activity; 
 }

 @property (nonatomic, retain) UIActivityIndicatorView *m_activity;

 - (IBAction)searchbutton:(id)sender;
 - (IBAction)home:(id)sender;

 @end

第一视图控制器.m

 #import "FirstViewController.h"

 @implementation FirstViewController


 @synthesize m_activity;

 // viewWillAppear loads every time younopen up this View

 - (void)viewWillAppear:(BOOL)animated {
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];          
   urlLocation = [NSURL fileURLWithPath:filePath];  
   [webview1 loadRequest:[NSURLRequest requestWithURL:urlLocation]]; 
 }




 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     
  if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {      
     //Initialization code      
     m_activity = nil;  
   }    
   return self; 
 }

 - (void)webViewDidFinishLoad:(UIWebView *)webView {    
   m_activity.hidden= TRUE;     
   [m_activity stopAnimating];  
   NSLog(@"Web View started loading...");
 }

 - (void)webViewDidStartLoad:(UIWebView *)webView {     
   m_activity.hidden= FALSE;    
   [m_activity startAnimating];     
   NSLog(@"Web View Did finish loading");
 }
4

3 回答 3

19

为什么在初始化中将活动指示器设置为零?

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     
  if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {      
     //Initialization code      
     m_activity = nil;  
   }    
   return self; 
}

从您的 XIB 调用 super 初始化了您的指标(假设您将它连接到 IB 中的插座),但是您在初始化后将引用设置为 nil。删除该行。然后返回界面生成器并设置“停止时隐藏”复选框。现在您可以简化显示指标的代码:

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

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

“停止时隐藏”会导致指示器在您停止动画时隐藏。

于 2009-08-21T14:49:05.513 回答
2

这里有什么问题,您在上面发布的代码应该可以工作,除了您没有在任何地方初始化指标(也许您在 viewDidLoad 中进行)但是上面显示的代码应该可以工作,因为指标已正确初始化并且您将 webview d elegate 设置为那里的视图控制器,我让它在我的一些应用程序上工作,我使用 webviews 和指示器来指示它何时加载......

于 2009-08-21T13:10:30.747 回答
0

UIWebView.loading 属性也可以使用。

Apple 的文档:@property(nonatomic, readonly, getter=isLoading) BOOL loading Description 一个布尔值,指示接收器是否已完成加载内容。(只读)如果是,接收器仍在加载内容;否则,否。

在 iOS6 中,Apple 似乎也修复了这个属性的一些问题。http://code-gotcha.blogspot.fi/2012/08/uiwebviewloading-in-ios-6-fixed.html

于 2012-08-27T12:46:01.770 回答