ios中封装网络和tableview的综合运用
1:封装网络请求 类
#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"
#import "Reachability.h" @protocol NetWorkDelegate; @interface JSNetWord : NSObject<ASIHTTPRequestDelegate>
+(id)ShareNetwork;
-(void)NetWorkWithConnctId:(int)connectid body:(NSString *)body PostBody:(NSString *)PostBody aDelegate:(id<NetWorkDelegate>)delegate;
@end @protocol NetWorkDelegate <NSObject> -(void)NetWorkWithConnectId:(int)connectid aBackString:(NSString *)backString withState:(int) state; @end #import "JSNetWord.h" @implementation JSNetWord
+(id)ShareNetwork{
static dispatch_once_t onceToken;
static JSNetWord *netWork=nil;
dispatch_once(&onceToken, ^{
netWork=[[JSNetWord alloc] init];
});
return netWork;
} //网络请求
-(void)NetWorkWithConnctId:(int)connectid body:(NSString *)body PostBody:(NSString *)PostBody aDelegate:(id<NetWorkDelegate>)delegate{
if([self IsConnect]){
UIAlertView *alertview=[[UIAlertView alloc] initWithTitle:nil message:@"请联网" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alertview show];
[alertview release];
if(delegate && [delegate respondsToSelector:@selector(NetWorkWithConnectId:aBackString:withState:)]){
[delegate NetWorkWithConnectId:connectid aBackString:nil withState:];
}
return;
}
ASIFormDataRequest *Request=[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://61.177.61.252/szzssw/taxCommon.action?code=1001&pagecode=1&menucode=3300000000"]];
Request.timeOutSeconds=;
Request.requestMethod=@"POST";
Request.delegate=self;
NSArray *PostBodyArrary=[PostBody componentsSeparatedByString:@"&"];
for(NSString *temp in PostBodyArrary){
NSArray *postArray=[temp componentsSeparatedByString:@"="];
[Request setPostValue:postArray[] forKey:postArray[]];
}
//封装参数
NSString *cid=[NSString stringWithFormat:@"%zi",connectid];
Request.userInfo=@{@"cid":cid,@"delegate":delegate};
[Request startAsynchronous];
} #pragma mark -ASIHttpRequest delegate
-(void)requestStarted:(ASIHTTPRequest *)request{
//可以加入 toast
} -(void)requestFinished:(ASIHTTPRequest *)request{
NSDictionary *dic=request.userInfo;
int connectid= [dic[@"cid"] intValue];
id<NetWorkDelegate> delegate=dic[@"delegate"];
if (delegate &&[delegate respondsToSelector:@selector(NetWorkWithConnectId:aBackString:withState:)]) {
[delegate NetWorkWithConnectId:connectid aBackString:[ request responseString] withState:];
} } -(void)requestFailed:(ASIHTTPRequest *)request{
NSDictionary *dic=request.userInfo;
int connectid= [dic[@"cid"] intValue];
id<NetWorkDelegate> delegate=dic[@"delegate"];
NSLog(@"错误原因:-->%@",request.error.localizedDescription);
if(delegate &&[delegate respondsToSelector:@selector(NetWorkWithConnectId:aBackString:)]){
[delegate NetWorkWithConnectId:connectid aBackString:[request responseString] withState:];
}
UIAlertView *alertview=[[UIAlertView alloc] initWithTitle:@"提示" message:@"请求失败" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alertview show];
[alertview release];
} //判断是否联网
-(BOOL)IsConnect{
BOOL IsCon=NO;
Reachability *r=[Reachability reachabilityWithHostName:@"www.baidu.com"];
switch ([r currentReachabilityStatus]) {
case NotReachable:
NSLog(@"not network");
IsCon=NO;
break;
case ReachableViaWiFi:
NSLog(@"wifi");
IsCon=YES;
break;
case ReachableViaWWAN:
NSLog(@"3g");
IsCon=YES;
break; default:
break;
}
return IsCon;
} @end
封装上下拉tableview .
配置步骤:英文原文和类库下载地址:https://github.com/emreberge/EGOTableViewPullRefresh
- 添加 QuartzCore.framework 到你的工程中。
- 将 EGOTableViewPullRefresh 拖到你的工程目录下。
- 查看 PullTableView.h 文件可用的属性。
- 添加一个PullTableView 到你代码中,实现PullTableViewDelegate委托方法
#import <UIKit/UIKit.h>
#import "PullTableView.h" @interface JSContentView : UIView<UITableViewDataSource,UITableViewDelegate,PullTableViewDelegate> -(id)initWithFrame:(CGRect)frame requestSEL:(SEL)aselector aDelegate:(id)delegate;
@property(nonatomic,assign)int Pagecode;
@property(nonatomic,readonly)PullTableView *tableview;
@property(nonatomic,retain)NSMutableArray *mydata;
@end #import "JSContentView.h"
#import "MyCell.h" @interface JSContentView ()
{
SEL selector;
id delegate;
} @end @implementation JSContentView #pragma mark -初始化
-(id)initWithFrame:(CGRect)frame requestSEL:(SEL)aselector aDelegate:(id)adelegate{
self=[super initWithFrame:frame];
if(self){
self.mydata=[NSMutableArray array];
_tableview =[[PullTableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
_tableview.delegate=self;
_tableview.dataSource=self;
_tableview.pullDelegate=self; //设置pulltableview 的背景色
_tableview.pullBackgroundColor=[UIColor clearColor];
_tableview.pullTextColor=[UIColor blackColor]; [self addSubview:_tableview];
selector=aselector;
delegate=adelegate; //第一次加载的时候默认要刷新。
if(!self.tableview.pullTableIsRefreshing){
self.tableview.pullTableIsRefreshing=YES;
if (delegate&&[delegate respondsToSelector:selector]) {
[delegate performSelector:selector];
}
}
self.tableview.pullTableIsLoadingMore=NO;
}
return self;
} - (void)dealloc
{
[_mydata release];
[super dealloc];
} #pragma mark -tableview dataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.mydata.count;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentify=@"myCell";
MyCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentify];
if (cell==nil) {
cell=[[[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentify] autorelease];
}
NSDictionary *dic=self.mydata[indexPath.row];
cell.value=dic;
return cell;
} #pragma mark -tableview delegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return ;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *str = [NSStringstringWithFormat:@"%d",indexPath.row];
if(self.delegate && [self.delegate respondsToSelector:@selector(EnterDetailPage:)]){
[self.delegate performSelector:@selector(EnterDetailPage:) withObject:str];
}
}
在viewcontroller里面运用起来。
#import <UIKit/UIKit.h> #import "JSContentView.h"
#import "JSNetWord.h" @interface ViewController : UIViewController<NetWorkDelegate> @end ===========
#import "ViewController.h"
#import "MyCell.h" @interface ViewController ()
{
JSContentView *newView;
} @property(nonatomic,retain)NSMutableArray *dataArray;
@end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad];
newView=[[JSContentView alloc] initWithFrame:self.view.bounds requestSEL:@selector(RequestData) aDelegate:self];
[self.view addSubview:newView];
[newView release];
//如果开始启用缓存
// NSString *cache=[self readApiCacheFileName:@"1.txt"];
// if (cache.length>0 &&newView.Pagecode<=1) {
// [self NetWorkWithConnectId:100 aBackString:cache withState:0];
// } } -(void)RequestData{
NSString *url=[NSString stringWithFormat:@"http://61.177.61.252/szzssw/taxCommon.action?code=1001&pagecode=%zi&menucode=3300000000",newView.Pagecode==?:newView.Pagecode];
//请求数据,重新刷新数据
[[JSNetWord ShareNetwork] NetWorkWithConnctId: body:url PostBody:nil aDelegate:self];
//先从缓存中读取
NSString *cache=[self readApiCacheFileName:@"1.txt"]; if (cache.length> &&newView.Pagecode==) {
[self NetWorkWithConnectId: aBackString:cache withState:];
} } #pragma mark -network delegate
-(void)NetWorkWithConnectId:(int)connectid aBackString:(NSString *)backString withState:(int)state{
if(connectid==){
//1:代表网络 0代表缓存
if (newView.Pagecode<= && state==) {
newView.tableview.pullTableIsRefreshing=NO;
}
if (newView.Pagecode>) {
newView.tableview.pullTableIsLoadingMore=NO;
} NSDictionary *dic=[backString JSONValue];
NSString *dealcode=dic[@"dealcode"];
if (![dealcode isEqualToString:@""]) {
return;
} if (newView.Pagecode==) {
[self saveApiCacheFileName:@"1.txt" textContent:backString Append:NO];
}
if (newView.Pagecode== &&newView.mydata.count>) {
[newView.mydata removeAllObjects];
}
NSArray *data=dic[@"content"];
[newView.mydata addObjectsFromArray:data];
[newView.tableview reloadData]; }
}
-(void)EnterDetailPage:(NSString *)row{
int r=[row intValue];
NSDictionary *dic=newView.mydata[r];
NSLog(@"%@",dic[@"title"]);
//可以创建指定controlview。
// ViewController *vc=[[ViewController alloc] init];
// ......
}
-(void)viewDidUnload{
[super viewDidUnload];
self.dataArray=nil;
}
- (void)dealloc
{
[_dataArray release];
[super dealloc];
}
@end
其中自定义cell
#import <UIKit/UIKit.h> @interface MyCell : UITableViewCell @property(nonatomic,retain)NSDictionary *value;
@end #import "MyCell.h"
#define KTitleFont 15
#define KFont 12
#define Kpadding 10 @interface MyCell (){
UILabel *titleLb;
UILabel *Contetlb;
UILabel *dataLb;
} @end @implementation MyCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
titleLb=[UILabel LabWithFrame:CGRectZero text:@"" textColor:[UIColor redColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:KTitleFont]];
// Contetlb=[UILabel LabWithFrame:CGRectZero text:@"" textColor:[UIColor blackColor] textAlign:NSTextAlignmentRight font:[UIFont systemFontOfSize:KFont]];
dataLb=[UILabel LabWithFrame:CGRectZero text:@"" textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:KFont]];
[self.contentView addSubview:titleLb]; [self.contentView addSubview:dataLb];
}
return self;
}
-(void)setValue:(NSDictionary *)value{
if(_value!=value){
[_value release];
_value=[value retain];
titleLb.text=value[@"title"];
dataLb.text=value[@"time"];
}
}
-(void)layoutSubviews{
[super layoutSubviews];
CGFloat width=self.contentView.bounds.size.width;
CGFloat height=self.contentView.bounds.size.height*0.5f;
CGFloat titlex=Kpadding;
CGFloat titley=Kpadding;
CGFloat titlew=width-*Kpadding;
CGFloat titleh=height;
titleLb.frame=CGRectMake(titlex, titley, titlew, titleh); CGFloat dx=titlex;
CGFloat dy=titley+titleh;
CGFloat dw=titlew;
CGFloat dh=height-Kpadding;
dataLb.frame=CGRectMake(dx, dy, dw, dh); } @end
地址 http://pan.baidu.com/share/link?shareid=1603134617&uk=923776187
ios中封装网络和tableview的综合运用的更多相关文章
- ios中封装网络请求类
#import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 ...
- IOS中的网络编程
在移动互联网时代,几乎所有应用都需要用到网络下载,比如图片的加载,音乐的下载,安装包的下载,等等,下面我们来看看如何进行下载 一.文件的下载我们用get来请求数据,并对请求的二进制数据进行解析存入文件 ...
- IOS中封装一个View的思路
一.封装一个View的思路 1.将View内部的业务逻辑(显示内容)封装到View中 2.一般情况下,View的位置应该由父控件来决定,也就是位置不应该固定死在View内部 3.至于View的宽高,根 ...
- iOS中的网络请求 和 网络监测
1.网络监测 //根据主机名判断网络是否连接 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu ...
- 聊聊 iOS 中的网络加密
介绍下 公司的接口一般会两种协议的,一种HTTP,一种HTTPS的,HTTP 只要请求,服务器就会响应,如果我们不对请求和响应做出加密处理,所有信息都是会被检测劫持到的,是很不安全的,客户端加密可以使 ...
- IOS中的网络编程详解
在移动互联网时代,几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力,如果没有了网络,也就缺少了数据变化,无论外观多 ...
- ios 中scrollview上面嵌套tableView,左右滑动出现数据多次刷新的问题
注意scrollView左右滑动时不要刷新数据,刚进来时一次性请求所有数据 红包纪录和房源信息可以左右滑动和点击,tableView可以上下滑动,图片部分个人信息只刷新一次. 界面布局如下
- iOS中 WGAFN_网络监控 技术分享
需要用到第三方AFNetworking/SVProgressHUD 没有的可以关注我微博私信我.http://weibo.com/hanjunqiang AppDelegate.m #import & ...
- ios中封装九宫格的使用(二级导航)
效果图 一般用于导航功能 第一步下载http://pan.baidu.com/share/link?shareid=1824940819&uk=923776187 第二步 把下图内容放在你的x ...
随机推荐
- 求职之C++小知识点整理
1.顺序容器 1.顺序容器:vector,deque,list,forward_list,array,string.其中除list和forward_list外,其它都支持快速随机访问. deque a ...
- Openstack中为虚拟机使用CDROM光驱设备
在Libvirt里处理 在nova里处理 实际效果 怎么卸载 在Libvirt里处理 尝试了下面有几种方法,为虚拟机载入光盘文件: 1.使用ide方式挂载: virsh attach-disk {in ...
- 【Kafka】Kafka-副本-分区设置-性能调优
Kafka-副本-分区设置-性能调优 SparkKafkaDemo - Executors kafka replication 负载均衡_百度搜索 Kafka 高性能吞吐揭秘 - 友盟博客 - Seg ...
- 65. XPages自定义控件(三)高级搜索之三
RecordView控件的两个文件的完整代码在本文末尾给出.虽说完整,仅靠这两个文件,RecordView控件还不能正常工作,因为在这两个文件里还引用了其他自定义控件,调用了作为managed bea ...
- android 桌面小工具(Widget)开发教程
刚学做了哥Widget,感觉不错哦,先来秀下效果(用朋友手机截的图) 这个Widget会每隔5秒钟自动切换内容和图片,图片最好使用小图,大图会导致你手机桌面(UI)线程卡顿 教程开始: 1.首先创建一 ...
- (转)C#垃圾回收机制详解
GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- GPUImage API文档之GPUImageInput协议
GPUImageInput协议主要包含一些输入需要渲染目标的操作. - (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)t ...
- C#.NET常见问题(FAQ)-如何使用2D绘图控件ZedGraph绘制坐标轴和坐标曲线
添加数据:示例添加了一条sin曲线和一条cos曲线,注意cos曲线比sin曲线点更密集(可以用这种方式控制点的采样疏密程度) 默认显示效果如下图所示,可以框选一个部分看放大效果 右击某个点可以 ...
- js检测来源网址,如果是搜索引擎跳转到新地址
[js]代码 <script> var regexp=/\.(sogou|soso|baidu|google|youdao|yahoo|bing|118114|biso|gougou|if ...
- Selenium2(webdriver)入门之TestNG的安装与简单使用
上一篇已经搭建好了Eclipse+selenium2的环境,这一篇主要记录下TestNG的使用. 一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Inst ...