2014-01-21 4 views
-1

나는UIWebView 위에 진행률 표시 줄을 구현하는 방법은 무엇입니까? 내가 엑스 코드 5에 iOS7에 대한 응용 프로그램을 개발하고

#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을 다음과 같이하는 .m 파일이

#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 

다음과 같이 .H 파일이보기 컨트롤러 ADMSViewController 에게 있습니다.

012,351을 다음과 같이 IMTWebCiew.m 파일 인

#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 

다음 H 파일은

#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 

내 문제는 진행률 표시 줄이 웹보기에서 애니메이션으로 나타나지 않는다는 것입니다. 제가 이오스 개발에 초보자로서 나를 도와주세요. 같은 방법을 구현할 다른 방법이 있다면 알려주십시오. 미리 답변 해 주셔서 감사합니다.

+0

로깅 또는 중단 점을 사용하여'resource : didFinishLoadingFromDataSource :'가 예상대로 호출되는지 확인 했습니까? – matt

+0

해당 번호가 호출되지 않습니다. – user2541457

+0

샘플 프로젝트를 연결하십시오 – codercat

답변

0

이런 종류의 경우 실제로 Content-Length 헤더를 사용하여 페이지 크기를 감지 할 수 있지만 그렇지 않은 경우 표시되지 않는 움직이는 얼룩말 횡단 막대 중 하나와 같은 로딩 컨트롤을 표시 할 수 있습니다 불연속 % 진행이지만 활동이 발생하고 있음을 보여줍니다. 또는 심지어 UIActivityIndicator). http://allseeing-i.com/ASIHTTPRequest/ASIWebPageRequest과 같은 기성 클래스를 시도해 볼 수 있으며 진행 상황을 보여줄 수 있습니다. 작성자는 다음과 같이 말합니다.

ASIWebPageRequests는 현재 외부 리소스와 함께 전체 요청에 대한 진행률 추적을 지원하지 않습니다. 그러나 외부 리소스 요청의 진행 업데이트는 대리인에게 전달되므로 약간의 작업만으로 직접 구현할 수 있습니다.