tableView左滑是开发中常见的操作方式,之前一直用 MGSwipeTableCell

如果您有以下问题:

  1. iOS11下自定义按钮图片不显示
  2. iOS12下图片为白色,改不了颜色
  3. 想用系统原生的方案解决问题

那您就继续往下看

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相关推荐

  1. 顺畅操作:教你微信小程序左滑实现更多功能

    前言 当你在使用微信小程序时,是否曾经遇到过左滑操作是如此的顺畅,让你想起了 iPhone 上的滑动操作?左滑操作在微信小程序中已经成为了一个常见的交互方式,它能够帮助用户快速地执行某些操作,提高了用 ...

  2. 微信小程序之触摸滑动事件案例+Slideview组件【手动左滑删除效果】

    前言: 现在很多程序上都有左滑删除的效果,其实实现很简单,今天我们主要来记录一下小程序的左滑删除的实现过程. 效果图: 实现效果: 当我们在该条记录上进行左滑操作时,整条记录跟着向左移动,同时右侧的删 ...

  3. iOS10、11自定义左滑菜单项背景图片

    // 以前的做法 // 1.ViewController代码如下:自定义三个左滑项 - (NSArray<UITableViewRowAction *> *)tableView:(UITa ...

  4. android listview标题置顶,Android仿QQ左滑删除置顶ListView操作

    最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...

  5. Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

    绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一 ...

  6. android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...

    Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...

  7. iOS -- iOS11新特性,如何适配iOS11

    前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...

  8. 你可能需要为你的APP适配iOS11

    iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. 本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bu ...

  9. ios 开发设置左滑退出_iOS 开发UITableView左滑出现删除按钮的运用方法

    释放双眼,带上耳机,听听看~! UITableView的编辑模式 实现UITableView简单的删除功能(左滑出现删除按钮) 首先UITableView需要进入编辑模式.实现下面的方法,即使什么代码 ...

最新文章

  1. 指针作为函数的返回值
  2. iphone桌面横屏设置在哪里_iPhone的实用攻略如此多,这4个你知道吗?
  3. Linux中的mysql.redis
  4. 软考考前冲刺第九,十章多媒体基础知识知识产权基础知识
  5. android什么是回调,Android中的回调是什么?
  6. JavaScript之继承模式,命名空间,对象枚举
  7. echarts柱形图x轴y轴互换_数控机床在加工零件时,突然出现X、Y、Z轴失控?如何处理...
  8. (转)如何检查系统是否支持Zend Optimizer
  9. 用verilog实现一个 一位全加器
  10. MTK TP驱动代码调用流程
  11. 《单片机原理与接口技术》期中测评
  12. Android 手机修改 WiFi MAC 地址
  13. 什么是光纤?光纤的原理是什么?你能想象没有光纤通讯的世界么?
  14. ASP.NET农历时间显示(两)
  15. 优化网站加快浏览器访问打开速度
  16. 安卓华为魅族等手机含有副账号登陆问题
  17. CDN概念和基本原理
  18. 【HTML】【休闲益智】真相?真香?只有一个!看看谁是大馋虫 or 贪吃鬼(找出真正吃了月饼的人
  19. windwos下启动Redis或者Sentinel报错【listen:Unknown error】的原因及解决办法
  20. 乔布斯遗失16年采访:A级人才的自尊心,不需要呵护

热门文章

  1. ROS机器人驱动板(含原理图以及PCB)已经打板测试且正在使用
  2. Css3学习日志 --css层叠样式表
  3. Keras深度学习实战(11)——可视化神经网络中间层输出
  4. Flutter Riverpod 全面深入解析,为什么官方推荐它?
  5. 习题3:计算一周有多少分钟,多少秒?
  6. 付费计算机毕业论文毕业设计课程设计
  7. java开发工程师报名费多少_都说Java工程师的薪资比较高,事实真是如此吗?
  8. oracle数据库rdo,10_Oracle_Admin_手动创建一个比较实用的数据库
  9. bing词典案例分析
  10. linux网络测速qerf,www.n5fe.com