文档章节

TableView实现基本的edit insert delete reorder功能

费
 
发布于 2016/02/20 16:56
字数 474
阅读 18
收藏 0

进入编辑TableView编辑模式(右上角的编辑按钮的回调方法)

//edit按钮的回调方法
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    
    if(editing) {
        self.editButtonItem.title = @"完成";
    }
    else {
        self.editButtonItem.title = @"编辑";
    }
    [self.tableView setEditing:editing animated:animated];
}

设置Row左侧的小图标

row的小图标有三种内置的选择: insert,delete,none。

//设置Row左侧的小图标
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row % 2 == 0) {
        return UITableViewCellEditingStyleDelete;
    }
    else{
        return UITableViewCellEditingStyleInsert;
    }
}

侧滑button的回调方法

在Controller中必须存在该方法才能出现侧滑效果。侧滑button的回调方法用于响应侧滑出现的button。

当点击Row左侧的内置小图标时,同样也会产生侧滑效果。因此,最终中的侧滑逻辑都是在下面的回调方法中实现的。

//该方法是侧滑出来的按钮的回调方法
//并且在Controller中必须存在该方法才能出现侧滑效果
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if(editingStyle == UITableViewCellEditingStyleDelete) {
        NSLog(@"response to delete button");
        //物理删除
        [self.countries removeObjectAtIndex:indexPath.row];
        
        //界面删除
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
    else if(editingStyle == UITableViewCellEditingStyleInsert) {
        NSLog(@"response to add button");
        //物理添加
        Country *originalCountry = [self.countries objectAtIndex:indexPath.row];
        Country *addCountry = [[Country alloc] initWithName:originalCountry.name];
        [self.countries insertObject:addCountry atIndex:indexPath.row];
        
        //界面添加
        //为新添加行构造一个indexPath,并放入数组中
        NSArray *indexPathArray = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]];
        [self.tableView insertRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationFade];
    }
}

实现Cell Reorder重排功能

为了实现Cell Reorder功能,必须实现下列两个方法。另外,使用Cell Reorder前必须激活编辑模式(右上角的编辑按钮)

//设置哪些row可以做reorder操作
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}

//move操作的回调方法
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    
    //物理重排
    [self.countries exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
    
    //重新加载数据
    [self.tableView reloadData];
}

Demo

https://git.oschina.net/iSingular/AddDeleteReorderRows.git

© 著作权归作者所有

费

粉丝 2
博文 13
码字总数 6589
作品 0
南宁
私信 提问
UITableView学习笔记

http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html   看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些...

goodlook
2016/02/22
25
0
UITableView 详解 教程

看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些最近学习的TableView的知识。下面进入正题,UITableView堪称UIKit里面最复杂的...

孙启超
2013/07/24
0
1
iOS TableView 多行选择实现

iOS TableView 多行选择实现 设置TableView可以多行选择,这里有2中方法可以实现 1.实现TableView的代理方法editingStyleForRowAtIndexPath:,返回值返回UITableViewCellEditingStyleDelete...

樱黯雨
2016/06/27
29
0
UITableView左右滑动删除常见问题

对于app应用来说,使用列表的形式展现数据非UITableView莫属.在熟练掌握了用UITableView展示数据以后,是不是也遇到了需要删除数据的需求?是不是觉得在一行数据上划动一下,然后出现一个删除按钮...

Lambda8421
2015/04/16
0
0
Objective-C --- - UITableView 二 对一进行一些属性补充(梳理总结)

//当点击cell时 -(void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath{ NSLog(@"%@",self.dataList[indexPath.section][indexPath.row]); } ====......

都英俊兮
2016/06/13
98
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
26分钟前
3
0
Spring系列教程六:AOP详细讲解

AOP 概述 什么是 AOP AOP:全称是 Aspect Oriented Programming 即:面向切面编程。 AOP技术是对OOP技术的一种延伸,AOP是面向纵向,OOP是面向横向。简单的说它就是把我们程序重复的代码抽取...

我叫小糖主
39分钟前
12
0
Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
今天
3
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
今天
3
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部