在开发中常常会有对TableViewCell编辑操作的需求,点击一下某个按钮,让cell处于编辑状态;还有向左滑动时,cell向右出现相应按钮可对cell进行相应的编辑。例如qq的好友列表,长按可以对好友列表进行分组管理,可以添加分组,删除现有分组,对分组进行移动排序等。

QQ好友分组管理.PNG

一,系统方式实现简单的删除,插入,移动

实现三个方法即可实现上图效果:

1.获取编辑样式

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewCellEditingStyle编辑样式枚举有三种,当然可以进行位运算组合

typedef NS_ENUM(NSInteger, UITableViewCellEditingStyle) {

UITableViewCellEditingStyleNone,

UITableViewCellEditingStyleDelete,

UITableViewCellEditingStyleInsert

};

说明

UITableViewCellEditingStyleNone 没有编辑样式

UITableViewCellEditingStyleDelete 删除样式

UITableViewCellEditingStyleInsert 插入样式

UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete 多选模式

2.提交编辑,在这个方法根据相应的编辑样式,进行相应的数据,UI处理

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

3.当cell处于编辑状态下时,是不能移动的,需要实现这个方法,才能实现转化Cell进行移动,

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

4,特别说明:如果需要当Cell处于编辑状态下时,Cell可以进行引导移动,Cell不会缩进且指向没有插入或删除按钮。则编辑状态选择应UITableViewCellEditingStyleNone,并实现以下这个方法

//处于编辑状态下,cell是否缩进 编辑样式是UITableViewCellEditingStyleNone才有效

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath

{

return NO;

}

二,左滑电池右侧实现多个按钮

左滑电池右侧多个按钮.jpg

1,在iOS8.0之前,要实现这样的效果图,是需要自定义的,系统重新提供相关的API。在iOS8.0系统提供了一个这样的API:

//左滑右侧添加多个按钮iOS8.0出的API

- (nullable NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath

该方法返回一个UITableViewRowAction类型的副本,系统提供了两种按钮样式

UITableViewRowActionStyleNormal灰底白字

UITableViewRowActionStyleDestructive红底白字

没有提供有字体大小及颜色的自定义,但可以修改背景色,使用backgroundColor来进行设置。要想自定义只能采用别的方式,下面会介绍

2,在iOS11.0系统还提供一个新的API

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath

比上面那个就多了一个图片的设置,但图片会被系统渲染成白色的。只有当单元达到一定得高度时,图片和文字才会一起显示,否则只会显示图片,不会显示文字

1542110709207.jpg

具体实现

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath

{

UIContextualAction *collectAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"收藏" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {

[self.dataSurces insertObject:@"我是新添加的" atIndex:indexPath.row];

[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];

completionHandler(YES);

}];

collectAction.image = [UIImage imageNamed:@"collect_icon"];

// collectAction.backgroundColor = [UIColor greenColor];

UIContextualAction *deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {

[self.dataSurces removeObjectAtIndex:indexPath.row];

[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];

completionHandler(YES);

}];

//设置了图片,图片会被系统渲染成白色的

deleteAction.image = [UIImage imageNamed:@"delete_icon"];

return [UISwipeActionsConfiguration configurationWithActions:@[deleteAction,collectAction]];

}

这种方式有个缺点就是,图片都被渲染变成白色的了,可能有时这不是需求想要的,那怎么办呢?需求虐我千百遍,我待需求如初恋。没关系下面我们就来看怎么去自定义

三,自定义左滑单元右侧实现多个按钮

先上张效果图

图片.jpeg

其实很简单的,只需要先用iOS8.0提供的API来实现多按钮,然后在去API

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

重建即可,具体实现

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

{

for (UIView *subview in tableView.subviews) {

if ([NSStringFromClass([subview class]) isEqualToString:@"UISwipeActionPullView"]) {

if ([NSStringFromClass([subview.subviews[0] class]) isEqualToString:@"UISwipeActionStandardButton"]) {

UIButton *collectBtn = subview.subviews[0];

collectBtn.backgroundColor = [UIColor greenColor];

[collectBtn setImage:[UIImage imageNamed:@"collect_icon"] forState:UIControlStateNormal];

[collectBtn setTitle:@"插入" forState:UIControlStateNormal];

UIButton *deleteBtn = subview.subviews[1];

[deleteBtn setImage:[UIImage imageNamed:@"delete_icon"] forState:UIControlStateNormal];

[deleteBtn setTitle:@"删除" forState:UIControlStateNormal];

}

}

}

}

简单吧

ios 如何在cell中去掉_iOS-UITableViewCell三种常用编辑模式:删除,插入,移动相关推荐

  1. ios 如何在cell中去掉_IOS之表视图单元格删除、移动及插入

    1.实现单元格的删除,实现效果如下 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @&q ...

  2. ios 如何在cell中去掉_iOS开发:关于 去除UITableViewCell复用机制 的几种方法

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击 ...

  3. ios 如何在cell中去掉_经典问题:代码中如何去掉烦人的“!=nullquot;判空语句

    问题 为了避免空指针调用,我们经常会看到这样的语句 if (someobject != null) { someobject.doCalc();} 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避 ...

  4. 在bat文件中关闭cmd窗口的快速编辑模式

    在bat文件中关闭cmd窗口的快速编辑模式 windows下再bat中输入 @echo off reg add HKEY_CURRENT_USER\Console /v QuickEdit /t RE ...

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

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

  6. 如何在 Excel 中查找合并的单元格(并删除它们)

    使用数字格式更改 Excel 中的日期格式 在 Excel 中从日期中删除时间的最简单方法是更改​​数字格式. 这不会从时间戳中删除时间--它只是阻止它在您的单元格中显示.如果您在计算中使用这些单元格 ...

  7. 如何在Java中以编程方式阅读,添加或删除PPT中的幻灯片便笺?

    幻灯片注释用于添加其他信息,作为演示文稿中的参考.演示者添加了这些注释,以回顾与他们的演示相关的要点.在本文中,将学习如何以编程方式操作演示文稿中的幻灯片注释.特别是,本文将介绍如何使用Java读取, ...

  8. 如何在Camtasia中对录制视频进行字幕编辑

    我们小时候会有这样的疑问,电视剧上的字幕是怎么做成的呢.字幕又是怎么不会从一幕到下一幕而产生不对应的呢.这就是影视的后期处理的结果了,利用视频的编辑软件,工作者们可以在特定的时间内加上相对应的台词,然 ...

  9. 如何在Ubuntu中添加和删除用户

    为了能够创建和删除用户,需要以root身份或具有sudo权限的用户身份登录.可以通过命令行和GUI两种方式进行操作,接下来主要讲解通过命令行操作 添加用户 在Ubuntu中,有两个命令行工具可用于创建 ...

最新文章

  1. 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
  2. Confluence 6 从你的 JDBC 连接中直接启用校验查询
  3. 2018个人写作计划~
  4. apt-get install用发
  5. 【Auto.js】[系统Intent]_系统设置页面的相关intent跳转
  6. Android双列表联动和固定头部ScrollView效果实现
  7. arcgis api for javascript创建webscene
  8. java选择排序百度_java选择排序
  9. jQuery性能优化指南(2)
  10. linux db2下载地址,请置顶:DB2 Developer Workbench下载地址
  11. rbf神经网络和bp神经网络,rbf神经网络百度百科
  12. 得到条形码的校验位函数
  13. UML用例图讲解及画法
  14. R语言:KNN算法的实现——kknn包
  15. 从0到1的电商架构应该怎么做?
  16. jnhs中国的省市县区邮编坐标mysql数据表
  17. 编译原理复习(4)语法分析--自上而下分析
  18. Google play billing Alpha / Beta 测试
  19. 机器学习-40-GAN-07-Feature Extraction(InfoGAN,VAE-GAN,BiGAN,Feature Disentangle(Voice Conversion))
  20. 2018年英语六级作文(附翻译)

热门文章

  1. 浪涌抑制专题-半导体放电管tss介绍
  2. 胡辛束、咪蒙、papi酱、新世相的焦虑 在2018年继续蔓延
  3. 实验2 灰度变换操作
  4. 《我从起点开始奔跑》
  5. c语言五子棋键盘操控,c语言写的鼠标操作的五子棋游戏,欢迎观赏!
  6. 与非营利朕亨基金会合作 Keybase将保密通讯软体结合加密货币
  7. Cloud一分钟 |周小川回应数字货币; 易到高管内讧风波未停;恒大健康回应FF员工诉讼...
  8. Linux操作系统实践期中考总结(选择题)
  9. 一、用Python从零实现横向联邦图像分类
  10. 前端安全中的 cookie 防护 - 加速乐(jsl)