iOS开发- MJRefresh (刷新框架)的简单到高级使用

2017-08-25  本文已影响0人  张小博ios

了在绝大多数的项目都用到上拉,下拉的开源三方控件MJRefresh

下载开源库MJRefresh https://github.com/CoderMJLee/MJRefresh

类的结构示意图

1.下拉使用带有红色的标记的两个类{1.MJRefreshNormalHeader (默认的下拉刷新)2.MJRefreshGifHeader

下面对默认的下拉刷新进行简单的使用

>1.引入头文件 

#import"MJRefresh.h"

2.直接 MJRefreshNormal类方法 调用加载数据的网络请求

 2.1添加刷新控件

self.tableView.mj_header=[MJRefreshNormal HeaderheaderWithRefreshingTarget:selfrefreshingAction:@selector(loadNewTopics)];

3.开始网络请求

[self.tableView.mj_headerbeginRefreshing];

4.在合适的时机结束网络请求

*发送请求给服务器,下拉刷新数据

- (void)loadNewTopics

{

>4.1.取消之前的请求()

声明的请求管理者的对象结束之前的网络请求的

XMGHTTPSessionManager *manager;

[self.manager.tasksmakeObjectsPerformSelector:@selector(cancel)];

>4.2 拼接参数

> 4.3发送请求

[self.managerGET:XMGCommonURLparameters:parametersprogress:nilsuccess:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {

数据请求回来结束刷新

[self.tableView.mj_header endRefreshing];

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {

if(error.code!=NSURLErrorCancelled) {//并非是取消任务导致的error,其他网络问题导致的error

[SVProgressHUDshowErrorWithStatus:@"网络繁忙,请稍后再试!"];

}

[self.tableView.mj_header endRefreshing];(结束刷新的方法)

}];

}

二 .上拉刷新同理

1.添加上拉刷新的控件及其方法

self.tableView.mj_footer= [MJRefreshNormal WithRefreshingTarget:selfrefreshingAction:@selector(loadMoreTopics)]; 

2,结束下拉刷新

[self.tableView.mj_footerendRefreshing];

三.上拉,下拉展示样式改变

要改变上拉下拉里面的子控件的样式,不产生更多的代码

使用集成的方法

创建myHeard继承父类MJRefreshHeader改变其,改变其子类的属性,或者自定义器子类的样式及其控件就可以了

m

#import"XMGDIYHeader.h"

@interfaceXMGDIYHeader()

@property(nonatomic,weak)UISwitch*s;

@property(nonatomic,weak)UIImageView*logo;

@end

@implementationXMGDIYHeader

- (instancetype)initWithFrame:(CGRect)frame

{

if(self= [superinitWithFrame:frame]) {

UISwitch*s = [[UISwitchalloc]init];

[selfaddSubview:s];

self.s= s;

UIImageView*logo = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"MainTitle"]];

[selfaddSubview:logo];

self.logo= logo;

//self.xmg_height = 70;

}

returnself;

}

- (void)layoutSubviews

{

[superlayoutSubviews];

self.logo.xmg_centerX=self.xmg_width*0.5;

self.logo.xmg_y=-3*self.logo.xmg_height;

self.s.xmg_centerX=self.xmg_width*0.5;

self.s.xmg_centerY=self.xmg_height*0.5;

}

#pragma mark -重写Header内部的方法

- (void)setState:(MJRefreshState)state

{

[supersetState:state];

if(state ==MJRefreshStateIdle) {//下拉可以刷新

[self.ssetOn:NOanimated:YES];

[UIViewanimateWithDuration:0.25animations:^{

self.s.transform=CGAffineTransformIdentity;

}];

}elseif(state ==MJRefreshStatePulling) {//松开立即刷新

[self.ssetOn:YESanimated:YES];

[UIViewanimateWithDuration:0.25animations:^{

self.s.transform=CGAffineTransformMakeRotation(M_PI_2);

}];

}elseif(state ==MJRefreshStateRefreshing) {//正在刷新

[self.ssetOn:YESanimated:YES];

[UIViewanimateWithDuration:0.25animations:^{

self.s.transform=CGAffineTransformMakeRotation(M_PI_2);

}];

}

}

上一篇下一篇

猜你喜欢

热点阅读