[IOS]关于UITableView行的增加和删除
来源:互联网 发布:如何进行数据预处理 编辑:程序博客网 时间:2024/05/16 15:34
首先先大致说下UITableView的增加删除的原理机制.
第一步:在TableView加载完全之后,此时默认表格是不允许改变的,那如何才能对其进行增加或者删除呢,那么首先得先把表格的editing属性修改为YES.这个editing属性是UITableView的一个属性值,可以通过UITableView的- (void)setEditing:(BOOL)editing animated:(BOOL)animate方法来设置(当然也可以直接用赋值的方式来修改该属性值,但是这样的话就没动画效果了).
第二步:当把上面第一步所描述的UITableView的editing属性修改为YES之后,这个时候UITableView会调用其代理UITableViewDelegate的- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath方法,该方法有两种返回值,一种是UITableViewCellEditingStyleDelete,一种是UITableViewCellEditingStyleInsert(默认返回是前一种),如果该方法的返回值是UITableViewCellEditingStyleDelete那么此时在表格行的左边会有一个删除的按钮,若该方法返回值是UITableViewCellEditingStyleInsert则左边会有一个添加按钮.
第三步:当点击了第二步中单元格左边的删除(或者添加按钮)之后,UITableView会调用其代理UITableViewDataSource的- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath方法,其中入参editingStyle的值根据点击的是删除还是添加按钮分别为UITableViewCellEditingStyleDelete或者UITableViewCellEditingStyleInsert. 当代理中实现了这个办法(只要实现了,即使是空方法),那么当你滑动单元行的时候,他会在右侧出现一个Delete按钮.
第四步:这时主要就需要实现第三步中的- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath方法了.如果这个方法是空方法,那么即使你点击第二步中出现的删除或是添加按钮(或者点击 滑动单元行后在其右边出现的Delete按钮)不会有任何反应,你需要在该方法中实现删除的一些动作,这个动作就看你自己想法了,你可以在这之中先修改表格load时的数据,然后然表格重新load,但是这种可能影响性能,你可以先修改表格load的数据,然后再调用UITableView的insertRowsAtIndexPaths:withRowAnimation:或者deleteRowsAtIndexPaths:withRowAnimation:方法来对单个单元格来进行添加或删除.示例代码参见如下(此代码摘自别的博客,链接请参见我前面关于UITableView的博文):
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ KCContactGroup *group =_contacts[indexPath.section]; KCContact *contact=group.contacts[indexPath.row]; if (editingStyle==UITableViewCellEditingStyleDelete) { [group.contacts removeObject:contact]; //考虑到性能这里不建议使用reloadData //[tableView reloadData]; //使用下面的方法既可以局部刷新又有动画效果 [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom]; //如果当前组中没有数据则移除组刷新整个表格 if (group.contacts.count==0) { [_contacts removeObject:group]; [tableView reloadData]; } }else if(editingStyle==UITableViewCellEditingStyleInsert){ KCContact *newContact=[[KCContact alloc]init]; newContact.firstName=@"first"; newContact.lastName=@"last"; newContact.phoneNumber=@"12345678901"; [group.contacts insertObject:newContact atIndex:indexPath.row]; [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];//注意这里没有使用reladData刷新 }}
其次,是一些进阶篇
待后续补充....
- [IOS]关于UITableView行的增加和删除
- IOS UITableView删除增加操作
- UITableView 动态增加删除行
- UITableView 动态增加删除行
- iOS UITableView实现滑动删除、增加、多选
- ios UITableView的移动、添加和删除
- UITableView 动态增加删除行
- 【iOS开发】 UITableView 理解与应用 (增加 删除 移动)
- iOS-UITableView的增加、移除
- iOS UITableView插入删除行
- UITableView 的行删除
- 关于ios UITableView的讲解
- IOS - 关于UITableView的用法
- iOS关于UITableView的用法和问题,都写到这里了!
- 关于UITableView中删除某一行方法的使用
- 给UITableView的侧滑删除增加多个按钮
- IOS之UITableView划动删除的实现
- IOS 如何实现UITableView的划动删除
- 使用ADF BC AM创建SOAP WebService
- UVA 10294 Arif in Dhaka (First Love Part 2) Polya计数
- AttachCurrentThread报错
- ARM寄存器
- 好客户端是怎样炼成的
- [IOS]关于UITableView行的增加和删除
- Team Formation 浙江省赛 (异或)
- LINUX下常用SHELL指令
- afrgth
- 圆头像,可拖动消息
- JS乱码解决方案
- Spring 配置 定时器
- Cygwin获取root权限
- 使用Python的Requests库进行web接口测试