ios 如何在cell中去掉_iOS-UITableViewCell三种常用编辑模式:删除,插入,移动
在开发中常常会有对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三种常用编辑模式:删除,插入,移动相关推荐
- ios 如何在cell中去掉_IOS之表视图单元格删除、移动及插入
1.实现单元格的删除,实现效果如下 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @&q ...
- ios 如何在cell中去掉_iOS开发:关于 去除UITableViewCell复用机制 的几种方法
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击 ...
- ios 如何在cell中去掉_经典问题:代码中如何去掉烦人的“!=nullquot;判空语句
问题 为了避免空指针调用,我们经常会看到这样的语句 if (someobject != null) { someobject.doCalc();} 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避 ...
- 在bat文件中关闭cmd窗口的快速编辑模式
在bat文件中关闭cmd窗口的快速编辑模式 windows下再bat中输入 @echo off reg add HKEY_CURRENT_USER\Console /v QuickEdit /t RE ...
- ios 开发设置左滑退出_iOS 开发UITableView左滑出现删除按钮的运用方法
释放双眼,带上耳机,听听看~! UITableView的编辑模式 实现UITableView简单的删除功能(左滑出现删除按钮) 首先UITableView需要进入编辑模式.实现下面的方法,即使什么代码 ...
- 如何在 Excel 中查找合并的单元格(并删除它们)
使用数字格式更改 Excel 中的日期格式 在 Excel 中从日期中删除时间的最简单方法是更改数字格式. 这不会从时间戳中删除时间--它只是阻止它在您的单元格中显示.如果您在计算中使用这些单元格 ...
- 如何在Java中以编程方式阅读,添加或删除PPT中的幻灯片便笺?
幻灯片注释用于添加其他信息,作为演示文稿中的参考.演示者添加了这些注释,以回顾与他们的演示相关的要点.在本文中,将学习如何以编程方式操作演示文稿中的幻灯片注释.特别是,本文将介绍如何使用Java读取, ...
- 如何在Camtasia中对录制视频进行字幕编辑
我们小时候会有这样的疑问,电视剧上的字幕是怎么做成的呢.字幕又是怎么不会从一幕到下一幕而产生不对应的呢.这就是影视的后期处理的结果了,利用视频的编辑软件,工作者们可以在特定的时间内加上相对应的台词,然 ...
- 如何在Ubuntu中添加和删除用户
为了能够创建和删除用户,需要以root身份或具有sudo权限的用户身份登录.可以通过命令行和GUI两种方式进行操作,接下来主要讲解通过命令行操作 添加用户 在Ubuntu中,有两个命令行工具可用于创建 ...
最新文章
- 个人建议:设置Alt+S快捷键来控制VSCode自动保存切换功能
- Confluence 6 从你的 JDBC 连接中直接启用校验查询
- 2018个人写作计划~
- apt-get install用发
- 【Auto.js】[系统Intent]_系统设置页面的相关intent跳转
- Android双列表联动和固定头部ScrollView效果实现
- arcgis api for javascript创建webscene
- java选择排序百度_java选择排序
- jQuery性能优化指南(2)
- linux db2下载地址,请置顶:DB2 Developer Workbench下载地址
- rbf神经网络和bp神经网络,rbf神经网络百度百科
- 得到条形码的校验位函数
- UML用例图讲解及画法
- R语言:KNN算法的实现——kknn包
- 从0到1的电商架构应该怎么做?
- jnhs中国的省市县区邮编坐标mysql数据表
- 编译原理复习(4)语法分析--自上而下分析
- Google play billing Alpha / Beta 测试
- 机器学习-40-GAN-07-Feature Extraction(InfoGAN,VAE-GAN,BiGAN,Feature Disentangle(Voice Conversion))
- 2018年英语六级作文(附翻译)