一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示

  • 刚开始加载数据值得注意的有以下几点
  1. 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置,自己设置contentInset
  2. 请求数据的时候用到了MJExtension来字典转模型,切记一定看好用模型类调用mj_**方法.自己当时手贱敲错了,系统总报错某某方法找不到.解决错误搞了很久.
  3. 请求完数据界面没有数据怎么办? -- 自己又忘了刷新表格啦!!

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

如上图:用户已经请求了一次网红数据了,为了不浪费用户流量,自己设置数据缓存,将用户请求过的数据暂时保存,用到的时候直接拿出来用.

  • 实现思路:左边的每一个模块对应右边的一类集合数据,在左边的模型类中声明一个集合属性用来存储对应右边的数据.加载完一次数据就将响应的集合数据存入左边的集合属性中.这样当用户再一次点击左边模块请求数据的时候,只要判断左边模型中的用来存储右边数据集合的属性是否>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)的更多相关文章

  1. swift实现UItableview上拉下拉刷新模块

    最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...

  2. Vue-上拉加载与下拉刷新(mint-ui:loadmore)一个页面使用多个上拉加载后冲突问题

    所遇问题: 该页面为双选项卡联动,四个部分都需要上拉加载和下拉刷新功能,使用的mint-ui的loadmore插件,分别加上上拉加载后,只有最后一个的this.$refs.loadmore.onTop ...

  3. 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题

    前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...

  4. vue项目中上拉加载和下拉刷新页面的实现

    功能:上拉加载,下拉刷新 使用方法: 自己创建一个.vue的文件(我自己是创建了一个PullToRefresh.vue的文件),将代码粘贴进去,具体的样式问题自己在该文件中调整. <templa ...

  5. PullToRefreshListView上拉加载、下拉刷新 eclipse项目

    说明:此项目实在fragment中的,需要依赖library完成,还用到了Xuitls.jar包.使用了Pull解析XML eclipse中的项目: //注意:此刷新功能是使用的第三方的PullToR ...

  6. iOS 上拉下拉刷新简单实现代码

    一般说到上拉刷新下拉刷新,很多人可能想到的是一个第三方开源框架EGORefresh,下面说下,如何自己写代码实现. UITableView本身是一个UIScrollView,所以UITableView ...

  7. iOS不得姐项目--图片帖子模块,大图默认显示最顶部分的处理

    一.刚开始的处理,设置Mode属性(self.pictureImageView.contentMode = UIViewContentModeScaleAspectFill;) 和 Clip Subv ...

  8. vue项目上滑滚动加载更多&下拉刷新

    上滑滚动时获取内容高度.屏幕高度和滚动高度(此处#sslist要为内容是id) 内容高度  let innerHeight = document.querySelector("#sslist ...

  9. iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示

    一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...

随机推荐

  1. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)

    1. Animation动画   在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimati ...

  2. codeforces 101C C. Vectors(数学)

    题目链接: C. Vectors time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  3. python中for和if else的使用

    In []: a = set('abcd') In []: b = set('ef') In []: def match(x,y): ....: for i in x: ....: for j in ...

  4. 用js判断时间的先后顺序

    我们在用户注册信息的时候,有时根据需要往往要加入一些时间上的判断,今天我在这里给大家推荐一款比较实用的时间先后顺序判断的代码,希望对大家有所有帮助. <!DOCTYPE HTML> < ...

  5. maven 多工程搭建演示

    maven出现后,很多公司会用maven来构建项目,单仅仅只是单项目单工程的 并没有使用多工程来构建,这样在以后,项目越来越大,业务越来越多以后,项目会难以维护,越发庞大,维护成本提高,团队士气也会下 ...

  6. Unity 物理引擎动力学关节

    Unity物理引擎中的各个动力学关节 Hinge Joint (铰链关节) Fixed Joint (固定关节) Spring Joint (弹簧关节) Character Joint(角色关节) C ...

  7. Open Sans字体兼容问题解决办法[font-face]

    参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...

  8. javascript限制上传文件大小

    在FireFox.Chrome浏览器中可以根据document.getElementById(“id_file”).files[0].size 获取上传文件的大小(字节数)使用的 api是FileRe ...

  9. Linux 删除文件夹和文件命令

    inux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就是 ...

  10. mysql5.7.12直接解压zip包,安装过程

    MySQL-5.7.12-winx64.zip解压安装方式 1.解压文件到你想要安装的位置.     本人是直接解压到E盘. 2.配置环境变量,在path中放入:E:\mysql-5.7.12-win ...