MJRefresh-简单使用

#import <MJRefresh.h>@interface HKTopicViewController ()
/** 当前最后一条帖子数据的描述信息,专门用来加载下一页数据 */
@property (nonatomic, copy) NSString *maxtime;
/** 所有的帖子数据 */
@property (nonatomic, strong) NSMutableArray<HKTopic *> *topics;
/** 请求管理者 */
@property (nonatomic, strong) AFHTTPSessionManager *manager;
@end- (AFHTTPSessionManager *)manager
{if (!_manager) {_manager = [AFHTTPSessionManager manager];}return _manager;
}- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = RGB(206, 206, 206);self.tableView.contentInset = UIEdgeInsetsMake(HKNavMaxY + HKTitlesViewH, 0, HKTabBarH, 0);self.tableView.scrollIndicatorInsets = self.tableView.contentInset;self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;// 注册cellUINib *nib = [UINib nibWithNibName:NSStringFromClass([HKTopicCell class]) bundle:nil];[self.tableView registerNib:nib forCellReuseIdentifier:HKTopicCellId];[self setupRefresh];
}
- (void)setupRefresh
{// 广告条UILabel *label = [[UILabel alloc] init];label.backgroundColor = [UIColor blackColor];label.frame = CGRectMake(0, 0, 0, 30);label.textColor = [UIColor whiteColor];label.text = @"广告";label.textAlignment = NSTextAlignmentCenter;self.tableView.tableHeaderView = label;// headerself.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];// 自动切换透明度self.tableView.mj_header.automaticallyChangeAlpha = YES;[self.tableView.mj_header beginRefreshing];// footerself.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopics)];
}
#pragma mark - 数据处理
/***  发送请求给服务器,下拉刷新数据*/
- (void)loadNewTopics
{// 1.取消之前的请求
    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];// 2.拼接参数NSMutableDictionary *parameters = [NSMutableDictionary dictionary];parameters[@"a"] = @"list";parameters[@"c"] = @"data";parameters[@"type"] = @(self.type);// 3.发送请求[self.manager GET:HKCommonURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {// 存储maxtimeself.maxtime = responseObject[@"info"][@"maxtime"];// 字典数组 -> 模型数据self.topics = [HKTopic mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];// 刷新表格
        [self.tableView reloadData];// 结束刷新
        [self.tableView.mj_header endRefreshing];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (error.code != NSURLErrorCancelled) { // 并非是取消任务导致的error,其他网络问题导致的error[SVProgressHUD showErrorWithStatus:@"网络繁忙,请稍后再试!"];}// 结束刷新
        [self.tableView.mj_header endRefreshing];}];
}/***  发送请求给服务器,上拉加载更多数据*/
- (void)loadMoreTopics
{// 1.取消之前的请求
    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];// 2.拼接参数NSMutableDictionary *parameters = [NSMutableDictionary dictionary];parameters[@"a"] = @"list";parameters[@"c"] = @"data";parameters[@"type"] = @(self.type);parameters[@"maxtime"] = self.maxtime;// 3.发送请求[self.manager GET:HKCommonURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {// 存储maxtimeself.maxtime = responseObject[@"info"][@"maxtime"];// 字典数组 -> 模型数据NSArray *moreTopics = [HKTopic mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];// 累加到旧数组的后面
        [self.topics addObjectsFromArray:moreTopics];// 刷新表格
        [self.tableView reloadData];// 结束刷新
        [self.tableView.mj_footer endRefreshing];if (self.topics.count >= 60) {[self.tableView.mj_footer endRefreshingWithNoMoreData];} else {[self.tableView.mj_footer endRefreshing];}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {if (error.code != NSURLErrorCancelled) { // 并非是取消任务导致的error,其他网络问题导致的error[SVProgressHUD showErrorWithStatus:@"网络繁忙,请稍后再试!"];}// 结束刷新
        [self.tableView.mj_footer endRefreshing];}];
}
#pragma mark - 数据源
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{// 根据数据量显示或者隐藏footerself.tableView.mj_footer.hidden = (self.topics.count == 0);return self.topics.count;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{// 清除内存缓存
    [[SDImageCache sharedImageCache] clearMemory];
}

刷新控件的状态:

/** 刷新控件的状态 */
typedef NS_ENUM(NSInteger, MJRefreshState) {/** 普通闲置状态 */MJRefreshStateIdle = 1,/** 松开就可以进行刷新的状态 */MJRefreshStatePulling,/** 正在刷新中的状态 */MJRefreshStateRefreshing,/** 即将刷新的状态 */MJRefreshStateWillRefresh,/** 所有数据加载完毕,没有更多的数据了 */MJRefreshStateNoMoreData
};

①(局部自定义)设置状态文字颜色-自动切换透明度

自定义一个类HKRefreshHeader继承于:MJRefreshNormalHeader

#import "HKRefreshHeader.h"@implementation HKRefreshHeader- (instancetype)initWithFrame:(CGRect)frame
{if (self = [super initWithFrame:frame]) {// 设置状态文字颜色self.stateLabel.textColor = [UIColor blueColor];self.stateLabel.font = [UIFont systemFontOfSize:17];[self setTitle:@"赶紧下拉刷新" forState:MJRefreshStateIdle];[self setTitle:@"松开?上刷新" forState:MJRefreshStatePulling];[self setTitle:@"正在拼命刷新..." forState:MJRefreshStateRefreshing];// 隐藏时间self.lastUpdatedTimeLabel.hidden = YES;// 自动切换透明度self.automaticallyChangeAlpha = YES;}return self;
}@end

②(全部自定义)

自定义一个类HKCustomRefreshHeader继承于:MJRefreshHeader

#import "HKCustomRefreshHeader.h"
@interface HKCustomRefreshHeader()
/** 开关 */
@property (nonatomic, weak) UISwitch *s;
/** logo */
@property (nonatomic, weak) UIImageView *logo;
@end@implementation HKCustomRefreshHeader
- (instancetype)initWithFrame:(CGRect)frame
{if (self = [super initWithFrame:frame]) {UISwitch *s = [[UISwitch alloc] init];[self addSubview:s];self.s = s;UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];[self addSubview:logo];self.logo = logo;//self.height = 70;//修改高度
    }return self;
}- (void)layoutSubviews
{[super layoutSubviews];self.logo.centerX = self.width * 0.5;self.logo.y =  -  3 * self.logo.height;self.s.centerX = self.width * 0.5;self.s.centerY = self.height * 0.5;
}#pragma mark - 重写Header内部的方法
- (void)setState:(MJRefreshState)state
{[super setState:state];if (state == MJRefreshStateIdle) { // 下拉可以刷新
        [self.s setOn:NO animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformIdentity;}];} else if (state == MJRefreshStatePulling) { // 松开立即刷新
        [self.s setOn:YES animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformMakeRotation(M_PI_2);}];} else if (state == MJRefreshStateRefreshing) { // 正在刷新
        [self.s setOn:YES animated:YES];[UIView animateWithDuration:0.25 animations:^{self.s.transform = CGAffineTransformMakeRotation(M_PI_2);}];}
}
@end

使用:

// header
self.tableView.mj_header = [HKRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];

补充:

MJRefresh 下拉刷新头部不显示的问题

在uicollectionView 头部有偏移量的时候, 往往给其加下拉刷新的的时候 , 头部的字(mj默认的)往往显示不出来, 此时就需要

MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{}];
header.ignoredScrollViewContentInsetTop = 20;
self.collectionView.mj_header              = header;

转载于:https://www.cnblogs.com/StevenHuSir/p/MJRefresh_Use.html

MJRefresh-简单使用相关推荐

  1. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  2. iOS MJRefresh下拉刷新(上拉加载)使用详解

    下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化.拓展新都更高一点. 因此本文着重讲一下MJRefresh的简单用法. 导 ...

  3. MJRefresh的使用

    1⃣写一个简单的tableview模版,显示数组里的数据 var ObjectArray = [String]()     var i = 0          override func viewD ...

  4. MJRefresh解析与详细使用指导

    MJRefresh解析与详细使用指导 本篇旨在更详细指导怎么使用对应的第三方,不会过多说明第三方怎么实现!就像你买了部新手机,说明书只说明怎么使用(及注意事项),并不说明手机由什么构造以及怎么制造!. ...

  5. IOS-小项目(饿了么 网络部分 简单实现)

    在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是 ...

  6. 简单搭建iOS开发项目框架

    今天我们来谈谈如何搭建框架,框架需要做一些什么. 第一步:找到我们的目标 我们的目标是让其他开发人员拿到手后即可写页面,不再需要考虑其他的问题. 第二步:我们需要做哪些东西 各位跟着我一步一步来进行. ...

  7. MJRefresh 源码详细解析

    MJRefresh是李明杰老师的作品,到现在已经有9800多颗star了,是一个简单实用,功能强大的iOS下拉刷新(也支持上拉加载更多)控件.它的可定制性很高,几乎可以满足大部分下拉刷新的设计需求,值 ...

  8. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  9. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  10. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

最新文章

  1. 零基础Java学习之初级项目实践(客户信息管理软件-附源码)
  2. Anaconda安装包报错——UnavailableInvalidChannel: The channel is not accessible or is invalid
  3. 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
  4. html session修改,html session
  5. ThinkPHP 3.1.2 模板中的变量
  6. Luogu3792 由乃与大母神原型和偶像崇拜
  7. Python 利用 shutil 移动文件
  8. 安装旧版本gcc的简便方法,软件包管理命令update-alternatives使用
  9. 洛谷入门题 深基2 例5~例8
  10. 《心灵捕手》中的10段经典台词(10 classic lines from Good Will Hunting)
  11. Pollard-Rho Algorithm简述
  12. 红米note3全网通(kenzo)非官方解锁
  13. 使用Quick BI 制作企业数据分析报表
  14. [0CTF 2016]piapiapia BUUCTF 详细writeup
  15. android获取经纬度代码
  16. 几种常见树形数据结构小结
  17. 解决更新包与已安装应用的签名不一致的问题
  18. 2018 Mossad Challenge
  19. #define 宏的边际效应是什么
  20. 图像区分平坦区域、边缘、角点区域

热门文章

  1. Jmeter服务器监控插件使用
  2. html5 - history 历史管理
  3. python中*args和**args的不同
  4. vue从入门到精通之高级篇(一)vue-router的高级用法
  5. Springboot整合thymeleaf模板
  6. 好程序员HTML5前端教程-css的引入方式和选择器
  7. 《移动App测试的22条军规》—App测试综合案例分析23.13节测试微信App的流量和电量消耗...
  8. 转:MAC 下安装PHONEGAP开发环境
  9. 微软Edge扩展工具箱旨在将Chrome扩展带至Edge
  10. LESS CSS 框架简介(转)