iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示
- 刚开始加载数据值得注意的有以下几点
- 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置,自己设置contentInset

- 请求数据的时候用到了MJExtension来字典转模型,切记一定看好用模型类调用mj_**方法.自己当时手贱敲错了,系统总报错某某方法找不到.解决错误搞了很久.
- 请求完数据界面没有数据怎么办? -- 自己又忘了刷新表格啦!!

二.解决数据重复请求的问题

如上图:用户已经请求了一次网红数据了,为了不浪费用户流量,自己设置数据缓存,将用户请求过的数据暂时保存,用到的时候直接拿出来用.
- 实现思路:左边的每一个模块对应右边的一类集合数据,在左边的模型类中声明一个集合属性用来存储对应右边的数据.加载完一次数据就将响应的集合数据存入左边的集合属性中.这样当用户再一次点击左边模块请求数据的时候,只要判断左边模型中的用来存储右边数据集合的属性是否>0,大于0的话就不再发起请求.解决了重复请求的问题.
<1>第一次请求数据的代码

<2>重复请求做的判断

三.分页数据加载与上拉下拉刷新(MJRefresh)
- 请求分页数据没有什么好说的,无非就是请求的页码加加,项目里配合MJRefresh进行上拉请求分页数据.初始化上拉下拉的代码

- 分页的实现(注意响应回来的数据是否正确,百思中总页数和下页页数有的就对不上.还好总数正确),也是讲右边数据的总数,与当前页的页数这两个属性声明到了左边模型类中.第一次请求数据的时候就当前页属性赋值为1,赋值总数

- 一定注意,不管是第一次请求数据,还是上拉下拉请求数据,还是刷新表格,都要时刻监测footer的样式

- 上拉加载更多数据代码:

- 下拉刷新代码:
/** 下拉加载新数据 */
- (void)loadNewData
{
ChaosRecommendCategory *category = ChaosSelectedCategory;
NSDictionary *parameters = @{
@"a" : @"list",
@"c" : @"subscribe",
@"category_id" : @(category.id)
};
// 请求右边用户数据
[self.manager GET:@"http://api.budejie.com/api/api_open.php" parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSArray *users = [ChaosRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]]; // 下拉会重复添加数据,为了保证不重复添加,每次下拉都清空原有的数据
[category.users removeAllObjects]; // 将分类对应的用户数据添加到集合中
[category.users addObjectsFromArray:users];
// 第一次请求右边数据的时候,将总数记录下来
category.total = [responseObject[@"total"] integerValue];
// 同时记录页数,第一次请求,肯定是第一页
category.currentPage = ; // 刷新右边的表格
[self.recommendUserTableView reloadData];
// 刷新完表格,头部停止刷新
[self.recommendUserTableView.mj_header endRefreshing];
// 决定footer的状态
[self checkFooterState]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [self.recommendUserTableView.mj_header endRefreshing];
[SVProgressHUD showErrorWithStatus:@"请求数据失败"];
}];
}
iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)的更多相关文章
- swift实现UItableview上拉下拉刷新模块
最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...
- Vue-上拉加载与下拉刷新(mint-ui:loadmore)一个页面使用多个上拉加载后冲突问题
所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTop ...
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...
- vue项目中上拉加载和下拉刷新页面的实现
功能:上拉加载,下拉刷新 使用方法: 自己创建一个.vue的文件(我自己是创建了一个PullToRefresh.vue的文件),将代码粘贴进去,具体的样式问题自己在该文件中调整. <templa ...
- PullToRefreshListView上拉加载、下拉刷新 eclipse项目
说明:此项目实在fragment中的,需要依赖library完成,还用到了Xuitls.jar包.使用了Pull解析XML eclipse中的项目: //注意:此刷新功能是使用的第三方的PullToR ...
- iOS 上拉下拉刷新简单实现代码
一般说到上拉刷新下拉刷新,很多人可能想到的是一个第三方开源框架EGORefresh,下面说下,如何自己写代码实现. UITableView本身是一个UIScrollView,所以UITableView ...
- iOS不得姐项目--图片帖子模块,大图默认显示最顶部分的处理
一.刚开始的处理,设置Mode属性(self.pictureImageView.contentMode = UIViewContentModeScaleAspectFill;) 和 Clip Subv ...
- vue项目上滑滚动加载更多&下拉刷新
上滑滚动时获取内容高度.屏幕高度和滚动高度(此处#sslist要为内容是id) 内容高度 let innerHeight = document.querySelector("#sslist ...
- iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示
一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...
随机推荐
- 使用jsonpath解析json内容
JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容.下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它. 一.首先需要 ...
- 【MVC 4】5.SportsSore —— 一个真实的应用程序
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 前面建立的都是简单的MVC程序,现在到了吧所有事情综合在一起,以建立一个简单但真实的电子商务应用 ...
- ZooKeeper 安装部署及hello world(转)
ZooKeeper 安装部署及hello world 先给一堆学习文档,方便以后查看官网文档地址大全:OverView(概述)http://zookeeper.apache.org/doc/r3.4 ...
- ZOJ 3232 It's not Floyd Algorithm --强连通分量+Floyd
题意:给你一个传递闭包的矩阵,mp[u][v] = 1表示u可以到达v,为0代表不可到达,问你至少需要多少条边组成的传递闭包符合这个矩阵给出的关系 分析:考虑一个强连通分量,如果这个分量有n个节点,那 ...
- SGU 174 Walls
这题用并查集来做,判断什么时候形成了环即判断什么时候加入的线段两个端点原先是属于同一集合的.对于一个点,有两个坐标x,y,不好做并查集操作,于是要用map来存储,即做成map<node,int& ...
- Android之数据存储----使用LoaderManager异步加载数据库
一.各种概念: 1.Loaders: 适用于Android3.0以及更高的版本,它提供了一套在UI的主线程中异步加载数据的框架.使用Loaders可以非常简单的在Activity或者Fragment中 ...
- LoadRunner支持的IE版本
LoadRunner支持的IE版本: 8.0 最高ie68.1 最高ie69.0 最高ie79.5 最高ie811.0 最高ie9( win7 32位+LR11+IE10可用,但win7 64位+LR ...
- Android 界面排版的5种方式
Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对 ...
- 【转】【WPF】WPF 登录窗口关闭时打开主窗口
在WPF中设计登录窗口关闭时打开主窗口,自动生成的App.xaml不能满足要求, 1.把App.xaml的属性窗口中的生成操作设定为 无 2.添加Program类 static class Progr ...
- 【Andorid------手势识别】GestureDetector和SimpleOnGestureListener的使用教程(转)——
FROM:http://www.cnblogs.com/transmuse/archive/2010/12/02/1894833.html 1. 当用户触摸屏幕的时候,会产生许多手势,例如down,u ...