UITableVIewcell的增删改 移动

x
这篇文章是建立在  代码实现 UITableView与UITableViewCell基础上进行修改,用不上的代码我注释调,部分不明白可以看看上篇博客;实现的功能是对UITableViewCell的标记、移动、删除、插入; 
1.标记:指的是选中某一行,在这一行后面有个符号,常见的是对勾形式 
通过修改cell的accessoryType属性来实现,首先,在ViewDidLoad中[tableView setEditing:NO animated:YES];表示把单元格可编辑状态这只为NO
  1. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3.     UITableViewCell *cellView = [tableView cellForRowAtIndexPath:indexPath];
  4.     if (cellView.accessoryType == UITableViewCellAccessoryNone) {
  5.         cellView.accessoryType=UITableViewCellAccessoryCheckmark;
  6.     }
  7.     else {
  8.         cellView.accessoryType = UITableViewCellAccessoryNone;
  9.         [tableView deselectRowAtIndexPath:indexPath animated:YES];
  10.     }
  11. }
复制代码
当我们选中单元格的时候,调用此函数,首先是indexPath检测选中了哪一行,if判断当前单元格是否被标记,也就是当前单元格风格,是否为UITableViewCellAccessoryCheckmark风格,如果是,则换成UITableViewCellAccessoryNone(不被标记风格)风格,以下是accessoryType四个风格属性 

UITableViewCellAccessoryCheckmark   
[img] 
 
[/img] 

UITableViewCellAccessoryDetailDisclosureButton 
[img] 
 
[/img] 

UITableViewCellAccessoryDisclosureIndicator 
[img] 
 
[/img] 


UITableViewCellAccessoryNone 
[img] 
 
[/img] 
2.移动  
实现移动单元格就需要把单元格的编辑属性设置为YES,[tableView setEditing:YES animated:YES];
  1. //返回YES,表示支持单元格的移动
  2. -(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
  3. {
  4.     return YES;
  5. }
复制代码
  1. //单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格
  2. -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  3. {
  4.     return UITableViewCellEditingStyleInsert;
  5. }
复制代码
三种风格的分别是: 

UITableViewCellEditingStyleDelete   
[img] 
 
[/img] 


UITableViewCellEditingStyleInsert 
[img] 
 
[/img] 


UITableViewCellEditingStyleNone 
[img] 
 
[/img] 

实现移动的方法
  1. -(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
  2. {
  3. //    需要的移动行
  4.     NSInteger fromRow = [sourceIndexPath row];
  5. //    获取移动某处的位置
  6.     NSInteger toRow = [destinationIndexPath row];
  7. //    从数组中读取需要移动行的数据
  8.     id object = [self.listData objectAtIndex:fromRow];
  9. //    在数组中移动需要移动的行的数据
  10.     [self.listData removeObjectAtIndex:fromRow];
  11. //    把需要移动的单元格数据在数组中,移动到想要移动的数据前面
  12.     [self.listData insertObject:object atIndex:toRow];  
  13. }
复制代码
单元格的移动是选中单元格行后面三条横线才可以实现移动的 3.删除 
首先是判断(UITableViewCellEditingStyle)editingStyle,所以
  1. //单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格
  2. -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  3. {
  4.     return UITableViewCellEditingStyleDelete;
  5. }
复制代码
  1. -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3.     if (editingStyle==UITableViewCellEditingStyleDelete) {
  4. //        获取选中删除行索引值
  5.         NSInteger row = [indexPath row];
  6. //        通过获取的索引值删除数组中的值
  7.         [self.listData removeObjectAtIndex:row];
  8. //        删除单元格的某一行时,在用动画效果实现删除过程
  9.         [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
  10.     }
  11. }
复制代码
删除了张四 效果图: 
[img] 
 
[/img] 



4.添加 
实现方法和删除方法相同,首先还是返回单元格编辑风格
  1. //单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格
  2. -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
  3. {
  4.     return UITableViewCellEditingStyleInsert;
  5. }
复制代码
为了显示效果明显,在.h文件中声明一个变量i
  1. #import <UIKit/UIKit.h>

  2. @interface STViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
  3. {
  4. NSInteger i;
  5. }
  6. @property(strong,nonatomic) NSMutableArray *listData;
  7. @property(strong,nonatomic)UITableView *tableView;
  8. @property(strong,nonatomic)UITableViewCell *tableViewCell;

  9. @end
复制代码
  1. -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  2. {
  3.     if (editingStyle==UITableViewCellEditingStyleDelete) {
  4. //        获取选中删除行索引值
  5.         NSInteger row = [indexPath row];
  6. //        通过获取的索引值删除数组中的值
  7.         [self.listData removeObjectAtIndex:row];
  8. //        删除单元格的某一行时,在用动画效果实现删除过程
  9.         [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
  10.     }
  11.     if(editingStyle==UITableViewCellEditingStyleInsert)
  12.     {
  13.        
  14.         i=i+1;
  15.         NSInteger row = [indexPath row];
  16.         NSArray *insertIndexPath = [NSArray arrayWithObjects:indexPath, nil];
  17.         NSString *mes = [NSString stringWithFormat:@"添加的第%d行",i];
  18. //        添加单元行的设置的标题
  19.         [self.listData insertObject:mes atIndex:row];
  20.         [tableView insertRowsAtIndexPaths:insertIndexPath withRowAnimation:UITableViewRowAnimationRight];
  21.     }
  22. }
复制代码
运行效果图: 
[img] 
 
[/img] 

在删除和添加单元格的用到UITableViewRowAnimation动画效果,它还有其他几种效果,在此不做测试 
UITableViewRowAnimationAutomatic      UITableViewRowAnimationTop 

UITableViewRowAnimationBottom          UITableViewRowAnimationLeft 

UITableViewRowAnimationRight             UITableViewRowAnimationMiddle 

UITableViewRowAnimationFade              UITableViewRowAnimationNone 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值