gekie 发表于 2013-1-30 20:40:27

异步加载网络数据,自定义进度条显示

http://dl.iteye.com/upload/attachment/526649/7233a36d-260a-3333-bb0e-bcba9697f856.jpg
 

//调用方式Ajax *ajax = [Ajax:urlStr target:self didFinish:@selector(showData:) isAllValues:NO valueForKey:@"list"showProgressBar:YES];;//异步回调方法-(void) showData:(NSArray*)data{   NSLog(@"data:%@",data);}  
////Ajax.h//live////Created by xjj xjj on 11-7-28.//Copyright 2011 新境界. All rights reserved.//#import <Foundation/Foundation.h>#import "UIProgressBar.h"@interface Ajax : NSObject {}@property(nonatomic,assign) id target;@property(nonatomic)SEL didFinish;@property(nonatomic,retain) NSMutableData *buf;@property(nonatomic,retain) NSURLConnection *connection;@property(nonatomic,assign) BOOL isAllValues;@property(nonatomic,assign) NSString* valueForKey;@property(nonatomic,assign) BOOL isText;@property(nonatomic,assign) NSString *urlStr;@property(nonatomic,retain) UIProgressBar *progressBar;@property(nonatomic,assign) long contentLength;@property(nonatomic,assign) BOOL showProgressBar;-(void)start;-(void)hiddenProgreesBar;/*!@method Ajax:target:didFinish:isAllValues:valueForKey:@discussion 异步加载某个节点数据(JSON格式)@param _urlStr 网络数据URL@param _target 调用者@param _didFinish 数据加载完毕后通知动作@param _isAllValues 是否返回所有数据 NO or YES@param _valueForKey 加载某个节点数据@result 初始化Ajax实例,并异步执行*/-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey;/*!@method Ajax:target:didFinish:@discussion 异步加数据(文件本格式)所有文本数据@param _urlStr 网络数据URL@param _target 调用者@param _didFinish 数据加载完毕后通知动作@result 初始化Ajax实例,并异步执行*/-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish;/*!@method Ajax:target:didFinish:isAllValues:valueForKey:showProgressBar:@discussion 异步加载某个节点数据(JSON格式)@param _urlStr 网络数据URL@param _target 调用者@param _didFinish 数据加载完毕后通知动作@param _isAllValues 是否返回所有数据 NO or YES@param _valueForKey 加载某个节点数据@param _showProgressBar 是否显示进度条 NO or YES@result 初始化Ajax实例,并异步执行*/-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey showProgressBar:(BOOL)_showProgressBar;/*!@method Ajax:target:didFinish:showProgressBar@discussion 异步加数据(文件本格式)所有文本数据@param _urlStr 网络数据URL@param _target 调用者@param _didFinish 数据加载完毕后通知动作@param _showProgressBar 是否显示进度条 NO or YES@result 初始化Ajax实例,并异步执行*/-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish showProgressBar:(BOOL)_showProgressBar;@end 
实现
 
////Ajax.m//live////Created by xjj xjj on 11-7-28.//Copyright 2011 新境界. All rights reserved.//#import "Ajax.h"#import "JSONParser.h"#import "UIProgressBar.h"@implementation Ajax@synthesize target,didFinish;@synthesize buf;@synthesize connection;@synthesize isAllValues,valueForKey;@synthesize isText;@synthesize urlStr;@synthesize progressBar;@synthesize contentLength;@synthesize showProgressBar;-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish showProgressBar:(BOOL)_showProgressBar{if(self){self.showProgressBar = _showProgressBar;self.urlStr = _urlStr;self.isText = YES;self.target = _target;self.didFinish = _didFinish;;}return self;}-(id) Ajax:(NSString*)_urlStr target:(id)_target didFinish:(SEL)_didFinish{/*self = ;if(self){self.showProgressBar = YES;self.urlStr = _urlStr;self.isText = YES;self.target = _target;self.didFinish = _didFinish;;}return self;*/return ;}-(id) Ajax:(NSString *)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey showProgressBar:(BOOL)_showProgressBar{self = ;if(self){self.showProgressBar = _showProgressBar;self.urlStr = _urlStr;self.isAllValues = _isAllValues;self.valueForKey = _valueForKey;self.target = _target;self.didFinish = _didFinish;;}return self;}-(id) Ajax:(NSString *)_urlStr target:(id)_target didFinish:(SEL)_didFinish isAllValues:(BOOL)_isAllValues valueForKey:(NSString *)_valueForKey{return ;}-(void)start{if(connection==nil){.networkActivityIndicatorVisible = YES;buf = [ initWithLength:0];NSMutableURLRequest *request = [init];];;connection = [initWithRequest:request delegate:self];if(]==YES&&showProgressBar==YES){UIViewController *viewController = (UIViewController*)target;progressBar = [ initWithFrame:CGRectMake(0, viewController.view.frame.size.height - 10,viewController.view.frame.size.width, 10)];progressBar.minValue = 0;];];//]];];;};}}//收到响应时- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{if(progressBar!=nil)progressBar.maxValue = response.expectedContentLength;}//接收数据-(void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data{;if(progressBar!=nil)progressBar.currentValue += ;}//加载失败-(void)connection:(NSURLConnection*)aConn didFailWithError:(NSError*)error{NSLog(@"didFailWithError:%@",error);;}//接收完毕-(void)connectionDidFinishLoading:(NSURLConnection *)connection{if(didFinish!=nil){if(isText);else{NSArray *data = ;;}};}-(void) hiddenProgreesBar{if(progressBar!=nil){//淡淡消失效果;;}.networkActivityIndicatorVisible = NO;}-(void)dealloc{;;;;}@end
页: [1]
查看完整版本: 异步加载网络数据,自定义进度条显示