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

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.cnblogs.com/wetest/p/8428735.html

时间: 2024-08-22 16:35:47

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

IOS开发——UI进阶篇(四)全局刷新,局部刷新,左滑操作,左滑出现更多按钮,进入编辑模式,批量删除,自定义批量删除

首先创建项目,在storyboard如下布局控件,设置好约束 然后创建cell模型类XMGWineCell数据模型类XMGWine创建UITableView,设置数据源协议,实现数据源方法懒加载数据这些在前面已经做过很多次了,代码就不一一写了 一.全局刷新 1.添加单组数据并全局刷新 - (IBAction)add { // 添加模型数据 XMGWine *wine = [[XMGWine alloc] init]; wine.money = @"20.5"; wine.name =

qq联系人 左滑删除功能

// 局部刷新 NSArray *indexPaths = @[ [NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0] ]; [self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft]; #pragma mark - 按钮的点击 - (IBAc

tableView左滑删除功能

实现三个代理方法即可 -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath { return @"删除"; } -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPat

iOS开发--左滑返回手势失效

在UINavigationBar中设置了leftBarbuttonItem此时系统自带的左滑手势失效,应该如何开启? self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

android 左滑删除控件,仿ios的左滑

GitHub地址:https://github.com/weileng11/SwipeRecyclerView-master 自定义的思路: 可以使用 HorizontalScrollView 控件,但是需要判断滑动距离,点击取消左滑的控件. 原文地址:https://www.cnblogs.com/IT-lss/p/10731757.html

IOS cell左滑出现多个功能按钮(IOS8以后支持)

#import "ViewController.h" #import "Swift_OC-Swift.h" @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property(nonatomic,strong)NSMutableArray

IOS UITableView多选删除功能

UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车.收藏列表等. 单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell.或者让表格进入编辑状态后,点击左侧的红色按钮,右侧出现删除按钮,删除,如下图所示.单行自带删除已经在前面文章中进行过讲解,需要的可以去查阅. 多选删除是点击编辑按钮,让表格进入编辑状态后,每行的左侧出现一个小圆圈,当点击行的时候,可以选中该行或者取消选中该行,当点击按钮确定删除的时候才

iOS UITableView表格做搜索功能,右边的搜索按钮

当我们阅读一篇文章,肯定过一段时间会忘记,那时候我们就需要用到搜索这个功能,搜索我们当时阅读的文字,用到搜索最多的恐怕是我用到的通讯录, 自从出了微信,一直在想,微信的那个右边顶部的搜索按钮是怎么加的,一直在想,最多想多的要么是一张图片,只能是张图片,如果是图片,那个只能自定义右侧,所以这个方法肯定是可以,还有一种情况,就是自带的方法有这个图片. - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {     

UITableView左滑 删除

http://blog.csdn.net/daiyelang/article/details/8729987 自定义左划控件需要的代理 http://blog.csdn.net/u012072580/article/details/50732068