2014-01-21 77 views
-1

我在xcode中5.开发用于iOS7应用我有一个视图控制器ADMSViewController .h文件是如下如何在UIWebView上实现进度条?

#import <UIKit/UIKit.h> 
#import "IMTWebView.h" 
@interface ADMSViewController : UIViewController <UIWebViewDelegate,IMTWebViewProgressDelegate> 
{ 
    NSString *barcode; 
    NSString *vinNumber; 
    NSTimer *timer; 

} 
@property (nonatomic,retain) IBOutlet UIWebView *webView; 
@property (nonatomic,retain) IBOutlet UIProgressView *progressView; 
@end 

.m文件是如下

#import "ADMSViewController.h" 

#import <QuartzCore/QuartzCore.h> 


@implementation ADMSViewController 

@synthesize webView; 
@synthesize progressView; 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view, typically from a nib. 
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]]; 

} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 

} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO animated:animated]; 

} 

- (void)webView:(IMTWebView *)_webView didReceiveResourceNumber:(int)resourceNumber totalResources:(int)totalResources { 
    [self.progressView setProgress:((float)resourceNumber)/((float)totalResources)]; 
    if (resourceNumber == totalResources) { 
     _webView.resourceCount = 0; 
     _webView.resourceCompletedCount = 0; 
    } 
} 


- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    self.webView = nil; 
    self.progressView = nil; 
} 

@end 

的IMTWebview。 h文件是如下

#import <UIKit/UIKit.h> 

@class IMTWebView; 

@protocol IMTWebViewProgressDelegate <NSObject> 
@required 
- (void) webView:(IMTWebView*)webView didReceiveResourceNumber:(int)resourceNumber totalResources:(int)totalResources; 
@end 

@interface IMTWebView : UIWebView { 
} 

@property (nonatomic, assign) int resourceCount; 
@property (nonatomic, assign) int resourceCompletedCount; 

@property (nonatomic, assign) id<IMTWebViewProgressDelegate> progressDelegate; 

@end 

的IMTWebCiew.m文件是如下

#import "IMTWebView.h" 

@interface UIWebView() 
-(id)webView:(id)view identifierForInitialRequest:(id)initialRequest fromDataSource:(id)dataSource; 
-(void)webView:(id)view resource:(id)resource didFinishLoadingFromDataSource:(id)dataSource; 
-(void)webView:(id)view resource:(id)resource didFailLoadingWithError:(id)error fromDataSource:(id)dataSource; 
@end 

@implementation IMTWebView 

@synthesize progressDelegate; 
@synthesize resourceCount; 
@synthesize resourceCompletedCount; 

-(id)webView:(id)view identifierForInitialRequest:(id)initialRequest fromDataSource:(id)dataSource 
{ 
    [super webView:view identifierForInitialRequest:initialRequest fromDataSource:dataSource]; 
    return [NSNumber numberWithInt:resourceCount++]; 
} 

- (void)webView:(id)view resource:(id)resource didFailLoadingWithError:(id)error fromDataSource:(id)dataSource { 
    [super webView:view resource:resource didFailLoadingWithError:error fromDataSource:dataSource]; 
    resourceCompletedCount++; 
    if ([self.progressDelegate respondsToSelector:@selector(webView:didReceiveResourceNumber:totalResources:)]) { 
     [self.progressDelegate webView:self didReceiveResourceNumber:resourceCompletedCount totalResources:resourceCount]; 
    } 
} 

-(void)webView:(id)view resource:(id)resource didFinishLoadingFromDataSource:(id)dataSource 
{ 
    [super webView:view resource:resource didFinishLoadingFromDataSource:dataSource]; 
    resourceCompletedCount++; 
    if ([self.progressDelegate respondsToSelector:@selector(webView:didReceiveResourceNumber:totalResources:)]) { 
     [self.progressDelegate webView:self didReceiveResourceNumber:resourceCompletedCount totalResources:resourceCount]; 
    } 
} 

@end 

我的问题是,在web视图中进度条不是动画。请帮助我,因为我是ios开发的新手。如果还有其他方法可以实施,请通知我。 预先感谢您的回答。

+0

你有没有使用记录或断点以确保'资源:didFinishLoadingFromDataSource:'正在像您期望的叫什么? – matt

+0

没有它的未被调用。 – user2541457

+0

链接您的样本项目 – codercat

回答

0

对于这种事情,用的Content-Length头,你真的只能“发现”页面大小,但除此之外,你仍然可以呈现负载控制(如移动斑马线类型的酒吧不显示的一个一个离散的百分比进度,但显示活动正在发生..甚至只是一个UIActivityIndi​​cator)。你可以尝试像http://allseeing-i.com/ASIHTTPRequest/ASIWebPageRequest一个现成的课呢,它可以显示进度。作者指出:

ASIWebPageRequests目前不支持进步提供了外部资源的整个请求跟踪。然而,从进度外部资源的请求更新传递到您的委托,所以有一些工作有可能要自己实现。