iOS集成下拉刷新控件 & 实现无感知上拉加载更多

简介: iOS集成下拉刷新控件 & 实现无感知上拉加载更多

引言

需求:

1、iOS零售版ERP APP增加支付奖励消息通知

image.png

2、通知信息(定时xx点;历史消息可查) 2021-04-29 尊敬的商家,您参与的xxx激励金活动,昨日参与成功10笔,共获得激励金1元!

image.png

由于消息列表,数据量比较大,为了提升用户体验,需采用分页加载显示数据

I、集成下拉刷新控件

image.png

1.1 定义相关分页属性

  • 分页属性
@property (nonatomic , assign) NSInteger pageNum;//当前页码
@property (nonatomic , assign) NSInteger pageCount;// 总页数
@property (nonatomic , assign) BOOL isfooterRereshing;
// 每页显示数...
  • VM中的事件和数据属性
@property (nonatomic,strong)  NSMutableArray *datas;
@property (nonatomic,strong)  RACSubject *reloadSubject;
@property (nonatomic,strong)  RACSubject *ShowNoviewSubject;
@property (nonatomic,strong)  RACSubject *hidenNoviewSubject;

1.2 监听下拉和上拉事件

  • VC 监听和处理下拉和上拉事件
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRereshing)];
        _tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRereshing)];
  • 处理上拉加载数据事件
/** 用于标志下拉动作*/
@property (nonatomic , assign) BOOL isfooterRereshing;
- (void)footerRereshing
{
    self.isfooterRereshing = YES;
    if ((_pageNum + 1) >  _pageCount) {
        [self.tableView.mj_footer endRefreshingWithNoMoreData];
        return;
    }
    _pageNum = _pageNum + 1;
    [self doorRequest];
}
  • 处理下拉刷新数据事件
- (void)headerRereshing
{
    self.isfooterRereshing = NO;
    [_doorArr removeAllObjects];// 移除数据,可请求成功之后,再移除
    _pageNum = 1;
    [self doorRequest];
}

1.3 请求数据的处理

请求成功和失败都要关闭刷新视图

[weakSelf.vcView.tableView.mj_footer endRefreshing];
        [weakSelf.vcView.tableView.mj_header endRefreshing];

完成代码请看原文:https://kunnan.blog.csdn.net/article/details/76572893

II、iOS实现无感知上拉加载更多

UITableViewDataSourcePrefetching

// this protocol can provide information about cells before they are displayed on screen.
@protocol UITableViewDataSourcePrefetching <NSObject>
@required
// indexPaths are ordered ascending by geometric distance from the table view
- (void)tableView:(UITableView *)tableView prefetchRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
@optional
// indexPaths that previously were considered as candidates for pre-fetching, but were not actually used; may be a subset of the previous call to -tableView:prefetchRowsAtIndexPaths:
- (void)tableView:(UITableView *)tableView cancelPrefetchingForRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
@end

其他实现思路:通过 KVO 去监听 scrollView 的 contentOffset 变化

MJRefreshAutoFooter 有个专门的属性triggerAutomaticallyRefreshPercent 去做自动刷新

#import "MJRefreshFooter.h"
NS_ASSUME_NONNULL_BEGIN
@interface MJRefreshAutoFooter : MJRefreshFooter
/** 是否自动刷新(默认为YES) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性");
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
/** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效,
 如果为 -1, 则为无限触发
 */
@property (nonatomic) NSInteger autoTriggerTimes;
@end

III 、案例:新浪微博API(获取用户微博数据)

https://download.csdn.net/download/u011018979/20689654

  • 集成下拉刷新控件:下拉刷新  HWHomeTableViewController
  • 获取未读消息数:   HWHomeTableViewController
  • 封装标题按钮:HWTitleButton

see also

目录
相关文章
|
iOS开发
iOS 利用贝塞尔曲线实现Q弹的下拉刷新
iOS 利用贝塞尔曲线实现Q弹的下拉刷新
155 0
|
3月前
|
定位技术 开发工具 iOS开发
百宝箱开放平台 ✖️ iOS 集成说明
本文介绍百宝箱智能体与友盟+ iOS 应用集成方法,涵盖手动集成、权限配置、SDK 初始化、日志查看及效果验证。提供依赖库添加、Info.plist 权限声明、channel 规范、demo 工程下载与运行说明,助您快速完成接入。
241 1
|
运维 监控 安全
Cisco ISR 4000 Series IOS XE 17.18.1a ED 发布 - 思科 4000 系列集成服务路由器 IOS XE 系统软件
Cisco ISR 4000 Series IOS XE 17.18.1a ED - 思科 4000 系列集成服务路由器 IOS XE 系统软件
190 0
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
690 0
|
人工智能 数据安全/隐私保护 iOS开发
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
|
iOS开发 Perl
IOS集成flutter_boost 3.0常见问题
IOS集成flutter_boost 3.0常见问题
350 0
|
机器学习/深度学习 定位技术 开发工具
必知的技术知识:ios个推推送集成
必知的技术知识:ios个推推送集成
409 0
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。
|
存储 监控 安全
打造高效移动办公环境:Android与iOS平台的集成策略
【5月更文挑战第15天】 在数字化时代,移动办公不再是一种奢望,而是日常工作的必需。随着智能手机和平板电脑的性能提升,Android与iOS设备已成为职场人士的重要工具。本文深入探讨了如何通过技术整合,提高两大移动平台在企业环境中的协同工作能力,重点分析了各自平台上的系统集成策略、安全性考虑以及跨平台协作工具的应用。通过对现有技术的剖析与案例研究,旨在为读者提供一套实用的移动办公解决方案。
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
627 0