资讯专栏INFORMATION COLUMN

iOS UITableView左滑操作功能的实现(iOS8-11)

chuyao / 804人阅读

摘要:原文链接导读本文主要是介绍下系统及之前的系统在实现左滑操作功能上的区别,及如何自定义左滑的标题颜色字体大小。专家预审腾讯专家为您遍历所有功能模块全面暴露内容被拒风险跟进问题直至上线需提供官方拒绝邮件。

作者:sonia,腾讯移动客户端开发 工程师
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。
原文链接:http://wetest.qq.com/lab/view/366.html

WeTest 导读

本文主要是介绍下iOS 11系统及iOS 11之前的系统在实现左滑操作功能上的区别,及如何自定义左滑的标题颜色、字体大小。


一、左滑操作功能实现

1、如果左滑的时候只有一个操作按钮,可以使用如下三个delegate方法来实现:

2、如果左滑有一个或多个操作按钮,iOS8-10 可使用如下两个delegate

3、iOS 11之后,tableView的delegate增加了两个方法,用来取代editActionsForRowAtIndexPath方法,如下:

在2和3中,如果是需要适配iOS 11之前的版本,以上三个方法都需要实现。

4、上面1.2和1.3中实现的方法的区别

体验上的不同就是当左滑只有一个button时,iOS 11中可以一直左滑,滑到一定程度时,会执行点击按钮的操作,iOS 11之前的不会。

iOS 11之前如果想增大button区域,可通过在标题前后加空格的方式,但iOS 11不行,加空格无效,button大小固定,超过4个字时换行显示。

二、左滑操作自定义标题颜色、字体

因为系统对左滑出的按钮只提供了3个可设置的属性:title、backgroundColor、image,如果使用自定义的titleColor和font,就需要自己来实现了。实现的思想是hook系统实现,但鉴于UITableView的view层级结构在iOS 11中有所改变,所以iOS8-10和iOS11的实现有所不同,以下分别给出。

考虑到代码的可复用性,自定义左滑操作的字体大小和颜色的代码不写在viewController中,而是写在UITableView和UITableViewCell的Category中,对外提供editActionTitleColor和editActionTitleFont属性来设置颜色和大小,需要使用自定义颜色和字体时只需要设置一下这两个属性即可。

1、iOS 8-10 设置标题颜色和字体

左滑操作后,UITableView的层级结构如下图:

由上图可知,左滑的操作按钮是在UITableViewCell的子view,所以我们可以在UITableViewCell的category中hook掉layoutSubviews方法,找到UITableViewCellDeleteConfirmationView的子view button,设置字体颜色和大小。

代码如下:

2、 iOS 11 设置标题颜色和字体

左滑操作后,UITableView的层级结构如下图:

由上图可知,左滑的操作按钮是在UITableView的子view,所以我们可以在UITableView的category中hook掉layoutSubviews方法,找到UISwipeActionPullView的子view button,设置字体颜色和大小。

代码如下:

三、遇到的问题及原因分析

1、问题是iOS 11上设置颜色有延迟,颜色有一个明显的跳变,从系统默认色跳转到我设置的颜色

有问题的代码如下:

2、问题原因分析

当左滑一个cell后,直接操作左滑另一个cell,这个时候tableView上会有两个UISwipeActionPullView,此时tableView的部分view层级如下图所示:

而上面的代码,在__findSwipActionButton方法中,找到其中一个UISwipeActionPullView上面的button就直接返回了,没有设置第二个UISwipeActionPullView的button的颜色,导致显示了系统默认色。

3、解决方法

将以上有问题的代码修改为以下代码:找出所有的UISwipeActionPullView,返回UISwipeActionPullView的button数组,对button数组进行设置字体颜色和大小,这个数组最多有两个元素,因为左滑出下一个cell时,上一个cell会逐渐消失,当此cell左滑操作完成时,上一个左滑的cell也会完成消失。

解决后的代码如二(2)的示例代码。


腾讯WeTest iOS预审工具

为了提高IEG苹果审核通过率,腾讯专门成立了苹果审核测试团队,打造出iOS预审工具这款产品。经过1年半的内部运营,腾讯内部应用的iOS审核通过率从平均35%提升到90%+。

现将腾讯内部产品的过审经验,以线上工具的形式共享给各位。在WeTest腾讯质量开放平台上可以在线使用。
点击 http://wetest.qq.com/product/ios 即可立即体验!

如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:800024531


iOS预审服务

【扫描工具】上传IPA包、图片、视频、应用描述即可进行测试; 多维度自动扫描提审材料的被拒风险;1小时内反馈全面的扫描报告。

【专家预审】腾讯专家为您遍历App所有功能模块;全面暴露App内容被拒风险;跟进问题直至上线(需提供官方拒绝邮件)。

【专家咨询】资深预审专家一对一服务; 咨询时间灵活可选,按需购买;有的放矢解 决审核问题。

【ASO优化】专业团队多维度深度剖析App的ASO现状;围绕App目标用户群筛选高 度关联的关键词;帮助提升App在苹果应用商店中的曝光率。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16966.html

相关文章

  • iOS11和iPhone X适配

    摘要:随着和刚开始正式发布,小编也迫不及待的更新了,手机也顺利更新到,也终于见到的真面不,看着齐刘海的样式,小编心里淡淡的忧伤,怎么适配,如何快速适配到项目中,成了一个蛋疼的问题文章讲解点首先看一下的模拟器样式吧的设计图启动页的适配刷新框架的适配 随着iOS11和xcode9刚开始正式发布,小编也迫不及待的更新了xcode9,手机也顺利更新到iOS,也终于见到iPhone X 的真面不,看着...

    番茄西红柿 评论0 收藏0
  • UITableView使用

    摘要:总体而言,一个可以包含多个行,但是只包含一个列,每个行就是一个单元格,这个单元格对应的类型是类型。的索引路径在中,是利用类型确定一个单元格所在的位置的。 概述 UITableView是iOS开发中最常用的控件之一,大多数应用程序中使用UITableView作为列表来展示内容。例如我们常见的微信程序,以及系统设置,都使用了UITableView或者它的子类进行界面元素的展示。 总体而言,...

    nemo 评论0 收藏0
  • ios Coredata 关联 UITableView 数据自动更新

    摘要:昨天写了一篇关于的文章,自己觉得挺傻的文章。没想其它程序员看过后觉得更傻,于是今天决定写一篇厉害点的,首先写了一个和结合的框架,非常简单实现了数据变化时对应的的视图也变化的效果。之前的代码已经被我覆盖掉了,新代码在这里 昨天写了一篇关于coredata的文章,自己觉得挺傻的文章。没想其它程序员看过后觉得更傻,于是今天决定写一篇厉害点的,首先写了一个coredata和uitablevie...

    iKcamp 评论0 收藏0
  • iOS开发④表视图

    摘要:表视图又一下部分组成表头视图表视图最上边的视图表脚视图表视图最下边的视图单元格表视图中每一行的视图节由多个单元格组成,应用于分组列表节头节脚表视图的相关类继承自,且有两个协议和。此外类时单元格类,类时的控制器,用于为节头和节脚提供视图。 概述 表视图组成 表视图是iOS开发中最重要的视图,它以列表的形式展示数据。表视图又一下部分组成: 表头视图:表视图最上边的视图 表脚视图:表视图最...

    bawn 评论0 收藏0
  • 江义旺:滴滴出行安卓端 finalize time out 解决方案

    摘要:在一些大型安卓中,经常会遇到一个奇怪的其表现为对象的方法超时,如。此前滴滴出行安卓端曾长期受此的影响,每天有一些用户会因此遇到,经过深度分析,最终找到有效解决方案。方法内尽量减少耗时以及线程同步时间。 出品 | 滴滴技术作者 | 江义旺 showImg(https://segmentfault.com/img/bVbtrZf?w=1080&h=459); 前言:随着安卓 APP 规模越...

    Zhuxy 评论0 收藏0

发表评论

0条评论

chuyao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<