在UIWebView加载时如何实现UIActivityIndi​​catorView?(iPhone ObjC)

9 iphone xcode objective-c activity-indicator

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

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

FirstViewController.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
Run Code Online (Sandbox Code Playgroud)

FirstViewController.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");
 }
Run Code Online (Sandbox Code Playgroud)

Mat*_*ong 19

为什么要在init中将活动指示器设置为nil?

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

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

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

- (void)webViewDidStartLoad:(UIWebView *)webView {     
   [m_activity startAnimating];     
}
Run Code Online (Sandbox Code Playgroud)

"停止时隐藏"会导致指示器在停止动画时隐藏.

  • 你不需要在`didFailLoadWithError`方法中关闭它吗? (2认同)

Dan*_*iel 2

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