OC/Swift 第三方 MJRefresh(源码)
一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。文章目录前言正题OC-MJRefresh(下拉刷新)OC-MJRefresh(上拉底部无温馨提示)OC-MJRefresh(上拉底部有温馨提示)Swift-MJRefresh(下拉刷新)Swift-MJRefresh(上拉底部无温馨提示)Swift-MJRefresh(上拉底部有温馨提示)含实战实现代码效果需求1.tableview加载数据的时候顶部出现上拉加载更多的提示语前言今天有空写一下MJRefresh的使用,这个东西其实不难,有空自己研究一下,网上也很多资料参考正题OC-MJRefresh(下拉刷新)OC-MJRefresh(下拉刷新)下载链接property (nonatomic,assign) NSInteger page; - (NSInteger)page{ if (_page 0) { _page 1; } return _page; } MJRefreshNormalHeader *header [MJRefreshNormalHeader headerWithRefreshingBlock:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self loadData]; [self.tableview.mj_header endRefreshing]; [self.tableview reloadData]; }); }]; [header setTitle:加载数据完成 forState:MJRefreshStateNoMoreData]; [header setTitle:正在加载数据 forState:MJRefreshStateRefreshing]; [header setTitle:刷新完毕 forState:MJRefreshStatePulling]; header.lastUpdatedTimeLabel.hidden YES; self.tableview.mj_header header;OC-MJRefresh(上拉底部无温馨提示)OC-MJRefresh(上拉底部无温馨提示)下载链接property (nonatomic,assign) NSInteger page; - (NSInteger)page{ if (_page 0) { _page 1; } return _page; } self.tableview.mj_footer [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:selector(loadMoreData)]; #pragma mark 上拉加载更多 -(void)loadMoreData{ if (self.arr.count 150) { [self.tableview.mj_footer endRefreshing]; self.tableview.mj_footer.hidden YES; return; } self.page 1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self loadData]; [self.tableview.mj_footer endRefreshing]; [self.tableview reloadData]; }); }OC-MJRefresh(上拉底部有温馨提示)OC-MJRefresh(上拉底部有温馨提示)下载链接property (nonatomic,assign) NSInteger page; property (nonatomic,strong) MJRefreshAutoNormalFooter *footer; self.footer [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:selector(loadMoreData)]; [self.footer setTitle:准备加载数据中... forState:MJRefreshStateIdle]; [self.footer setTitle:努力加载数据中... forState:MJRefreshStateRefreshing]; self.tableview.mj_footer self.footer; #pragma mark 上拉加载更多 -(void)loadMoreData{ if (self.arr.count 78) { [self.footer setTitle:已显示全部内容 forState:MJRefreshStateIdle]; [self.footer setTitle:已显示全部内容 forState:MJRefreshStateRefreshing]; [self.footer.loadingView setHidden:YES]; [self.tableview.mj_footer endRefreshing]; return; } self.page 1; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self loadData]; [self.tableview.mj_footer endRefreshing]; [self.tableview reloadData]; }); }Swift-MJRefresh(下拉刷新)Swift-MJRefresh(下拉刷新)下载链接var page 1 let header MJRefreshNormalHeader { self.loadData() self.tableView.mj_header?.endRefreshing() self.tableView.reloadData() } header.setTitle(加载数据完成, for: .noMoreData) header.setTitle(正在加载数据, for: .refreshing) header.setTitle(刷新完毕, for: .pulling) header.lastUpdatedTimeLabel?.isHidden true tableView.mj_header headerSwift-MJRefresh(上拉底部无温馨提示)Swift-MJRefresh(上拉底部无温馨提示)下载链接var page 1 tableView.mj_footer MJRefreshAutoNormalFooter(refreshingTarget: self, refreshingAction: #selector(loadMoreData)) objc func loadMoreData() { if self.arr.count 150 { self.tableView.mj_footer?.endRefreshing() self.tableView.mj_footer?.isHidden true return } self.page 1 //延时 0.5s 执行 DispatchQueue.global().asyncAfter(deadline: DispatchTime.now()1.0) { DispatchQueue.main.async { self.loadData() self.tableView.mj_footer?.endRefreshing() self.tableView.reloadData() } } }Swift-MJRefresh(上拉底部有温馨提示)含实战Swift-MJRefresh(上载底部有温馨提示)下载链接var footer MJRefreshAutoNormalFooter() var page 1 footer MJRefreshAutoNormalFooter(refreshingTarget: self, refreshingAction: #selector(loadMoreData)) footer.setTitle(准备加载数据中..., for: .idle) footer.setTitle(努力加载数据中..., for: .refreshing) tableView.mj_footer footer objc func loadMoreData() { if arr.count 150 { footer.setTitle(已显示全部内容, for: .idle) footer.setTitle(已显示全部内容, for: .refreshing) footer.loadingView?.isHidden true tableView.mj_footer?.endRefreshing() return } page 1 //延时 0.5s 执行 DispatchQueue.global().asyncAfter(deadline: DispatchTime.now()1.0) { DispatchQueue.main.async { self.loadData() self.tableView.mj_footer?.endRefreshing() self.tableView.reloadData() } } }实现代码private var footerMJRefreshAutoNormalFooter()private var page0footerMJRefreshAutoNormalFooter(refreshingTarget: self, refreshingAction:#selector(buildData))footer.setTitle(准备加载数据中..., for: .idle)footer.setTitle(努力加载数据中..., for: .refreshing)footer.setTitle(没有更多数据了, for: .noMoreData)tableView.mj_footerfooter效果需求1.tableview加载数据的时候顶部出现上拉加载更多的提示语应该这个提示语是上拉加载更多的时候才应该出现的.因为控制器第一次进来的时候tableview没有数据,商家加载更多的提示语有默认设置了,所以就会看到这段提示语.(Tap or pull up to load more)我做NML音乐播放app的时候看到过有同时默认进来加载数据之前把tableview隐藏它.等数据请求回来再把它显示出来.就解决了这个问题2019年做那货商城app的时候我处理这个方法是,等tableview成功加载到数据之后才显示footerviewtableview初始化设置的时候是把footerview隐藏的

相关新闻

SpringBoot+Vue图书商城管理系统源码详解,适合毕设课设

SpringBoot+Vue图书商城管理系统源码详解,适合毕设课设

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 6:34:39 阅读更多 →
M5 Vision Pro真实体验:轻量AR眼镜如何融入日常生活

M5 Vision Pro真实体验:轻量AR眼镜如何融入日常生活

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 15:11:28 阅读更多 →
MySQL安装配置与使用教程(2026.9.14 MySQL8.0.46)

MySQL安装配置与使用教程(2026.9.14 MySQL8.0.46)

CONTENTS1. MySQL的安装与配置2. MySQL常用操作教程1. MySQL的安装与配置 MySQL Windows Installer 下载地址:MySQL Installer。 我们下载最新版本(目前是8.0.46)的安装包,注意要选择更大的那个,名字为 mysql-instal…

2026/10/25 16:36:12 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻