美文网首页
iOS开发- MJRefresh (刷新框架)的简单到高级使用

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

作者: 张小博ios | 来源:发表于2017-08-25 10:47 被阅读0次

    了在绝大多数的项目都用到上拉,下拉的开源三方控件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);

    }];

    }

    }

    相关文章

      网友评论

          本文标题:iOS开发- MJRefresh (刷新框架)的简单到高级使用

          本文链接:https://www.haomeiwen.com/subject/vjrylxtx.html