[Swift5]自定义UITableViewCell左滑操作,适配iOS11 ~ iOS13
tableView左滑是开发中常见的操作方式,之前一直用 MGSwipeTableCell
如果您有以下问题:
- iOS11下自定义按钮图片不显示
- iOS12下图片为白色,改不了颜色
- 想用系统原生的方案解决问题
那您就继续往下看
iOS 11 新增了两个方法,个人觉得比原先的方法好用多了,不用手动控制 tableView 的 edit,当滑动时会自动开启
// Swipe actions
// These methods supersede -editActionsForRowAtIndexPath: if implemented
// return nil to get the default swipe actions
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
以左滑删除为例:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {let deleteAction = UIContextualAction(style: .normal, title: "") { (action, sourceView, completionHandler) inself.dataSource.remove(at: indexPath.row)tableView.deleteRows(at: [indexPath], with: .automatic)// 需要返回true,否则没有反应completionHandler(true) }deleteAction.backgroundColor = self.tableView.backgroundColordeleteAction.image = UIImage(named: "your image")let config = UISwipeActionsConfiguration(actions: [deleteAction])// 取消拉动长后自动删除config.performsFirstActionWithFullSwipe = falsereturn config}
其中重点1是系统类似于 “邮件”app拉长后自动操作,添加以下代码可以取消这个操作
config.performsFirstActionWithFullSwipe = false
重点2是在闭包里需要返回 true
才能响应方法
// 需要返回true,否则没有反应
completionHandler(true)
这样简单的添加就做完了,在iOS13上运行没有问题,一切正常,接下来问题来了…
问题一: 在iOS12上显示的图片为白色,不管什么颜色都会显示白色
问题二: 在iOS11上图片能显示,但是如果一个cell还没有归位,而左滑第二个cell时不显示图片
直接上代码:
func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {self.makeSwipeButton()}func makeSwipeButton() {if #available(iOS 13.0, *) {} else {for subview in self.tableView.subviews {if subview.isKind(of: NSClassFromString("UISwipeActionPullView")!) {let button = subview.subviews.first as? UIButtonbutton?.setImage(UIImage(named: "esense_my_star_delete"), for: .normal)// 在ios11 上因为有两个 UISwipeActionPullView 所以return的话第二个滑动的cell图片不显示// return}}}}
在iOS11上可以打断点看滑动第二个cell时,有两个 UISwipeActionPullView
,所以千万不能 return
这样问题就解决了,还可以根据subView找到合适的层级添加圆角或其他自定义效果
[Swift5]自定义UITableViewCell左滑操作,适配iOS11 ~ iOS13相关推荐
- 顺畅操作:教你微信小程序左滑实现更多功能
前言 当你在使用微信小程序时,是否曾经遇到过左滑操作是如此的顺畅,让你想起了 iPhone 上的滑动操作?左滑操作在微信小程序中已经成为了一个常见的交互方式,它能够帮助用户快速地执行某些操作,提高了用 ...
- 微信小程序之触摸滑动事件案例+Slideview组件【手动左滑删除效果】
前言: 现在很多程序上都有左滑删除的效果,其实实现很简单,今天我们主要来记录一下小程序的左滑删除的实现过程. 效果图: 实现效果: 当我们在该条记录上进行左滑操作时,整条记录跟着向左移动,同时右侧的删 ...
- iOS10、11自定义左滑菜单项背景图片
// 以前的做法 // 1.ViewController代码如下:自定义三个左滑项 - (NSArray<UITableViewRowAction *> *)tableView:(UITa ...
- android listview标题置顶,Android仿QQ左滑删除置顶ListView操作
最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...
- Android自定义组合控件---教你如何自定义下拉刷新和左滑删除
绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一 ...
- android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...
Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...
- iOS -- iOS11新特性,如何适配iOS11
前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...
- 你可能需要为你的APP适配iOS11
iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. 本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bu ...
- ios 开发设置左滑退出_iOS 开发UITableView左滑出现删除按钮的运用方法
释放双眼,带上耳机,听听看~! UITableView的编辑模式 实现UITableView简单的删除功能(左滑出现删除按钮) 首先UITableView需要进入编辑模式.实现下面的方法,即使什么代码 ...
最新文章
- 指针作为函数的返回值
- iphone桌面横屏设置在哪里_iPhone的实用攻略如此多,这4个你知道吗?
- Linux中的mysql.redis
- 软考考前冲刺第九,十章多媒体基础知识知识产权基础知识
- android什么是回调,Android中的回调是什么?
- JavaScript之继承模式,命名空间,对象枚举
- echarts柱形图x轴y轴互换_数控机床在加工零件时,突然出现X、Y、Z轴失控?如何处理...
- (转)如何检查系统是否支持Zend Optimizer
- 用verilog实现一个 一位全加器
- MTK TP驱动代码调用流程
- 《单片机原理与接口技术》期中测评
- Android 手机修改 WiFi MAC 地址
- 什么是光纤?光纤的原理是什么?你能想象没有光纤通讯的世界么?
- ASP.NET农历时间显示(两)
- 优化网站加快浏览器访问打开速度
- 安卓华为魅族等手机含有副账号登陆问题
- CDN概念和基本原理
- 【HTML】【休闲益智】真相?真香?只有一个!看看谁是大馋虫 or 贪吃鬼(找出真正吃了月饼的人
- windwos下启动Redis或者Sentinel报错【listen:Unknown error】的原因及解决办法
- 乔布斯遗失16年采访:A级人才的自尊心,不需要呵护
热门文章
- ROS机器人驱动板(含原理图以及PCB)已经打板测试且正在使用
- Css3学习日志 --css层叠样式表
- Keras深度学习实战(11)——可视化神经网络中间层输出
- Flutter Riverpod 全面深入解析,为什么官方推荐它?
- 习题3:计算一周有多少分钟,多少秒?
- 付费计算机毕业论文毕业设计课程设计
- java开发工程师报名费多少_都说Java工程师的薪资比较高,事实真是如此吗?
- oracle数据库rdo,10_Oracle_Admin_手动创建一个比较实用的数据库
- bing词典案例分析
- linux网络测速qerf,www.n5fe.com