FMMoveTableView实战解析:手把手构建多Section电影列表长按拖动排序Demo
FMMoveTableView实战解析手把手构建多Section电影列表长按拖动排序Demo【免费下载链接】FMMoveTableViewDiscontinued: Please use iOS 11s Drag Drop capability instead.项目地址: https://gitcode.com/gh_mirrors/fm/FMMoveTableViewFMMoveTableView是一个经典的 iOS 开源组件它是UITableView的子类让表格行可以通过长按 拖动完成拖拽排序且无需切换到编辑模式。本文将带你从零构建一个多 Section 电影列表的长按拖动排序 Demo两个分组Section展示 30 部老电影手指按住任意一行上下拖动即可跨分组调整顺序。⚠️重要提示该项目已停止维护Discontinued。作者建议新项目直接使用iOS 11 及以上系统原生的 Drag Drop能力。但作为理解拖动排序底层实现原理的范本这个 Demo 依然非常值得一读。一、先看效果多Section电影列表Demo长什么样Demo 的界面结构很简单却五脏俱全两个 Section每个 Section 包含 15 部 1926–1932 年的经典电影数据来自 Movies.plist每行三个属性片名、年份、行高50/60/70 交错方便观察拖动时的行高适配长按任意行该行生成带阴影的快照悬浮跟随手指松手后完成排序并更新数据模型。启动图同时是 Demo 的界面基调如下图所示二、项目结构速览核心代码只有4个文件模块作用FMFramework/核心组件仅 4 个文件FMMoveTable/可运行的 Demo 工程核心就 4 个文件全部可以手动拖进项目FMMoveTableView.h / FMMoveTableView.m表格视图负责手势、快照与自动滚动FMMoveTableViewCell.h / FMMoveTableViewCell.m单元格负责被拖动时清空内容。三、最快接入方法6步配置清单按照 README 的官方说明接入步骤如下iOS 9 及更早项目适用导入QuartzCore框架快照阴影效果需要把FMMoveTableView.(h/m)和FMMoveTableViewCell.(h/m)加入工程也可通过 CocoaPods 安装见 FMMoveTableView.podspec将你的UITableView子类改为继承FMMoveTableViewStoryboard 中把 Class 改掉即可见 MainStoryboard.storyboard;将UITableViewCell子类改为继承FMMoveTableViewCell让 ViewController 遵循FMMoveTableViewDataSource协议可选遵循FMMoveTableViewDelegate协议Demo 入口见 FMViewController.h必须实现moveTableView:moveRowFromIndexPath:toIndexPath:在松手后更新你的数据模型。四、长按拖动原理拆解手势→快照→自动滚动整个拖动的灵魂在 FMMoveTableView.m可以拆成三个关键环节1️⃣ 长按手势拦截视图创建时挂上一个UILongPressGestureRecognizer。手势开始前会先询问数据源这一行允许拖动吗canMoveRowAtIndexPath:不允许就直接不响应——这就是拖拽权限的第一道闸门。2️⃣ 生成悬浮快照Snapshot长按成立的瞬间代码对当前 Cell 截图加上半透明与阴影让它漂浮起来跟随手指原 Cell 内容则被清空prepareForMove方法见 FMMoveTableViewCell.m形成原位置让位的视觉效果。3️⃣ 边缘自动滚动Autoscroll拖动到列表顶部/底部 60% 行高范围内时会启动一个 60fps 的定时器自动滚动表格让你能把行拖到屏幕外的位置——长列表排序体验的关键就在这里。五、多Section排序的3个数据源陷阱拖动过程中数据源处于**脏状态**真实数据要等松手后才更新因此数据源里必须做三处适配Demo 里都有醒目的注释陷阱处理位置核心技巧行数对不上FMViewController.m目标 Section 行数 1起始 Section 行数 -1内容错位FMViewController.m用adaptedIndexPathForRowAtIndexPath:把 indexPath 换算回真实数据位置行高错位FMViewController.m计算行高前同样先换算 indexPath松手后的最终落位快照动画飞回目标位置 → 回调moveRowFromIndexPath:toIndexPath:→ 你在这里把电影对象从旧 Section 数组移除、插入新 Section 数组数据模型更新完毕。整个拖动中的实时换位由表格内部用deleteRows insertRows模拟FMMoveTableView.m。六、常用回调速查想限制拖动范围改这一个方法FMMoveTableView设计了 4 个与系统UITableView拖拽风格对齐的回调全部定义在 FMMoveTableView.h能不能动moveTableView:canMoveRowAtIndexPath:数据源即将移动moveTableView:willMoveRowAtIndexPath:委托能不能去某位置moveTableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:委托移动完成moveTableView:moveRowFromIndexPath:toIndexPath:数据源 实用技巧在第三个回调中如果sourceIndexPath.section与proposedDestinationIndexPath.section不同就返回sourceIndexPath即可禁止跨 Section 拖动把行锁定在本分组内排序FMViewController.m 中已写好注释好的示例代码。七、总结旧组件值得学新项目请用原生Drag Drop学原理FMMoveTableView 用不到 450 行代码完整演示了手势识别 → 快照跟随 → 模拟换位 → 边缘自动滚动 → 脏数据修正的全链路是学习拖拽排序的绝佳范本做新项目iOS 11 请直接使用系统 Drag DropUITableViewDragDelegate/UITableViewDropDelegate获得系统级流畅体验与无障碍支持维护老项目若最低支持版本低于 iOS 11FMMoveTableView 依然是长按拖动排序的可靠选择。希望这篇 FMMoveTableView 实战解析能帮你彻底读懂表格拖动排序的实现原理。【免费下载链接】FMMoveTableViewDiscontinued: Please use iOS 11s Drag Drop capability instead.项目地址: https://gitcode.com/gh_mirrors/fm/FMMoveTableView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

theme-machine项目结构全解析:data.json、SCSS与三种起步模板各司其职的秘密

theme-machine项目结构全解析:data.json、SCSS与三种起步模板各司其职的秘密

theme-machine项目结构全解析:data.json、SCSS与三种起步模板各司其职的秘密 【免费下载链接】theme-machine A collection of stylized Bootstrap Themes 项目地址: https://gitcode.com/gh_mirrors/th/theme-machine 本文带你快速读懂 theme-machine 项目结…

2026/11/16 3:24:39 阅读更多 →
wifi-password进阶实战:5个基于该模块构建网络自动化小工具的创意方案

wifi-password进阶实战:5个基于该模块构建网络自动化小工具的创意方案

wifi-password进阶实战:5个基于该模块构建网络自动化小工具的创意方案 【免费下载链接】wifi-password Get current wifi password 项目地址: https://gitcode.com/gh_mirrors/wifi/wifi-password wifi-password 是一个跨平台的 Node.js 模块,只需…

2026/11/16 3:24:39 阅读更多 →
PingFangSC 如何选对字重:3 步装好苹果方中文字体

PingFangSC 如何选对字重:3 步装好苹果方中文字体

PingFangSC 如何选对字重:3 步装好苹果方中文字体 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC PingFangSC 是一个苹果方字体(中…

2026/10/24 3:00:18 阅读更多 →

最新新闻

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

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

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

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

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

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

2026/11/15 5:13:35 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

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

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

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

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

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

2026/11/15 3:37:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

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

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

2026/11/15 4:18:38 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

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

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

2026/11/15 5:13:35 阅读更多 →

日新闻

周新闻

月新闻