UITableViewCell的标记、移动、删除、插入
2013-11-27 16:32
344 查看
这篇文章是建立在
1.标记:指的是选中某一行,在这一行后面有个符号,常见的是对勾形式
通过修改cell的accessoryType属性来实现,首先,在ViewDidLoad中[tableView
setEditing:NO animated:YES];表示把单元格可编辑状态这只为NO
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cellView = [tableView cellForRowAtIndexPath:indexPath];
if (cellView.accessoryType == UITableViewCellAccessoryNone) {
cellView.accessoryType=UITableViewCellAccessoryCheckmark;
}
else {
cellView.accessoryType = UITableViewCellAccessoryNone;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
当我们选中单元格的时候,调用此函数,首先是indexPath检测选中了哪一行,if判断当前单元格是否被标记,也就是当前单元格风格,是否为UITableViewCellAccessoryCheckmark风格,如果是,则换成UITableViewCellAccessoryNone(不被标记风格)风格,以下是accessoryType四个风格属性
UITableViewCellAccessoryCheckmark
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryNone
2.移动
实现移动单元格就需要把单元格的编辑属性设置为YES,[tableView
setEditing:YES animated:YES];
[cpp] view
plaincopy
//返回YES,表示支持单元格的移动
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleInsert;
}
三种风格的分别是
UITableViewCellEditingStyleDelete UITableViewCellEditingStyleInsert
UITableViewCellEditingStyleNone
实现移动的方法
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// 需要的移动行
NSInteger fromRow = [sourceIndexPath row];
// 获取移动某处的位置
NSInteger toRow = [destinationIndexPath row];
// 从数组中读取需要移动行的数据
id object = [self.listData objectAtIndex:fromRow];
// 在数组中移动需要移动的行的数据
[self.listData removeObjectAtIndex:fromRow];
// 把需要移动的单元格数据在数组中,移动到想要移动的数据前面
[self.listData insertObject:object atIndex:toRow];
}
单元格的移动是选中单元格行后面三条横线才可以实现移动的
3.删除
首先是判断(UITableViewCellEditingStyle)editingStyle,所以
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
// 获取选中删除行索引值
NSInteger row = [indexPath row];
// 通过获取的索引值删除数组中的值
[self.listData removeObjectAtIndex:row];
// 删除单元格的某一行时,在用动画效果实现删除过程
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
删除了张四 效果图:
4.添加
实现方法和删除方法相同,首先还是返回单元格编辑风格
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleInsert;
}
为了显示效果明显,在.h文件中声明一个变量i
[cpp] view
plaincopy
#import <UIKit/UIKit.h>
@interface STViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
NSInteger i;
}
@property(strong,nonatomic) NSMutableArray *listData;
@property(strong,nonatomic)UITableView *tableView;
@property(strong,nonatomic)UITableViewCell *tableViewCell;
@end
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
// 获取选中删除行索引值
NSInteger row = [indexPath row];
// 通过获取的索引值删除数组中的值
[self.listData removeObjectAtIndex:row];
// 删除单元格的某一行时,在用动画效果实现删除过程
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
if(editingStyle==UITableViewCellEditingStyleInsert)
{
i=i+1;
NSInteger row = [indexPath row];
NSArray *insertIndexPath = [NSArray arrayWithObjects:indexPath, nil];
NSString *mes = [NSString stringWithFormat:@"添加的第%d行",i];
// 添加单元行的设置的标题
[self.listData insertObject:mes atIndex:row];
[tableView insertRowsAtIndexPaths:insertIndexPath withRowAnimation:UITableViewRowAnimationRight];
}
}
运行效果图:
在删除和添加单元格的用到UITableViewRowAnimation动画效果,它还有其他几种效果,在此不做测试
UITableViewRowAnimationAutomatic UITableViewRowAnimationTop
UITableViewRowAnimationBottom UITableViewRowAnimationLeft
UITableViewRowAnimationRight UITableViewRowAnimationMiddle
UITableViewRowAnimationFade UITableViewRowAnimationNone
附上源代码:http://download.csdn.net/detail/duxinfeng2010/4416925
代码实现 UITableView与UITableViewCell基础上进行修改,用不上的代码我注释调,部分不明白可以看看上篇博客;实现的功能是对UITableViewCell的标记、移动、删除、插入;
1.标记:指的是选中某一行,在这一行后面有个符号,常见的是对勾形式通过修改cell的accessoryType属性来实现,首先,在ViewDidLoad中[tableView
setEditing:NO animated:YES];表示把单元格可编辑状态这只为NO
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cellView = [tableView cellForRowAtIndexPath:indexPath];
if (cellView.accessoryType == UITableViewCellAccessoryNone) {
cellView.accessoryType=UITableViewCellAccessoryCheckmark;
}
else {
cellView.accessoryType = UITableViewCellAccessoryNone;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
当我们选中单元格的时候,调用此函数,首先是indexPath检测选中了哪一行,if判断当前单元格是否被标记,也就是当前单元格风格,是否为UITableViewCellAccessoryCheckmark风格,如果是,则换成UITableViewCellAccessoryNone(不被标记风格)风格,以下是accessoryType四个风格属性
UITableViewCellAccessoryCheckmark
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryNone
2.移动
实现移动单元格就需要把单元格的编辑属性设置为YES,[tableView
setEditing:YES animated:YES];
[cpp] view
plaincopy
//返回YES,表示支持单元格的移动
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleInsert;
}
三种风格的分别是
UITableViewCellEditingStyleDelete UITableViewCellEditingStyleInsert
UITableViewCellEditingStyleNone
实现移动的方法
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
// 需要的移动行
NSInteger fromRow = [sourceIndexPath row];
// 获取移动某处的位置
NSInteger toRow = [destinationIndexPath row];
// 从数组中读取需要移动行的数据
id object = [self.listData objectAtIndex:fromRow];
// 在数组中移动需要移动的行的数据
[self.listData removeObjectAtIndex:fromRow];
// 把需要移动的单元格数据在数组中,移动到想要移动的数据前面
[self.listData insertObject:object atIndex:toRow];
}
单元格的移动是选中单元格行后面三条横线才可以实现移动的
3.删除
首先是判断(UITableViewCellEditingStyle)editingStyle,所以
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
// 获取选中删除行索引值
NSInteger row = [indexPath row];
// 通过获取的索引值删除数组中的值
[self.listData removeObjectAtIndex:row];
// 删除单元格的某一行时,在用动画效果实现删除过程
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
删除了张四 效果图:
4.添加
实现方法和删除方法相同,首先还是返回单元格编辑风格
[cpp] view
plaincopy
//单元格返回的编辑风格,包括删除 添加 和 默认 和不可编辑三种风格
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleInsert;
}
为了显示效果明显,在.h文件中声明一个变量i
[cpp] view
plaincopy
#import <UIKit/UIKit.h>
@interface STViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
NSInteger i;
}
@property(strong,nonatomic) NSMutableArray *listData;
@property(strong,nonatomic)UITableView *tableView;
@property(strong,nonatomic)UITableViewCell *tableViewCell;
@end
[cpp] view
plaincopy
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
// 获取选中删除行索引值
NSInteger row = [indexPath row];
// 通过获取的索引值删除数组中的值
[self.listData removeObjectAtIndex:row];
// 删除单元格的某一行时,在用动画效果实现删除过程
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
if(editingStyle==UITableViewCellEditingStyleInsert)
{
i=i+1;
NSInteger row = [indexPath row];
NSArray *insertIndexPath = [NSArray arrayWithObjects:indexPath, nil];
NSString *mes = [NSString stringWithFormat:@"添加的第%d行",i];
// 添加单元行的设置的标题
[self.listData insertObject:mes atIndex:row];
[tableView insertRowsAtIndexPaths:insertIndexPath withRowAnimation:UITableViewRowAnimationRight];
}
}
运行效果图:
在删除和添加单元格的用到UITableViewRowAnimation动画效果,它还有其他几种效果,在此不做测试
UITableViewRowAnimationAutomatic UITableViewRowAnimationTop
UITableViewRowAnimationBottom UITableViewRowAnimationLeft
UITableViewRowAnimationRight UITableViewRowAnimationMiddle
UITableViewRowAnimationFade UITableViewRowAnimationNone
附上源代码:http://download.csdn.net/detail/duxinfeng2010/4416925
相关文章推荐
- tableviewcell重绘
- UIPickerView 自定义
- 基于fluentd和mongod实现CloudFoundry的日志收集过程中遇到的问题!(切身感受,遇到什么写什么了)
- easyui 校验 日期类型(easyui-datetimebox)的特殊性
- UIImage与UIImageView有神马关系?
- easyui validatebox 验证集合,自定义easyui验证规则
- EV3DVue
- GUI数据传递userdata
- st build后自动将项目deploy到android project的asset/www目录的方法
- ucGUI概念
- Arquillian Exception:java.lang.NoClassDefFoundError
- Arquillian Exception:java.lang.NoClassDefFoundError
- UIImagePickerController
- 大湿教我写程序(3)之自动补全(屌丝没有春天)篇
- 大湿教我写程序(2)之走向AV之路
- 大湿教我写程序(1)之菜单导航篇
- NHibernate 使用CreateSQLQuery进行查询
- android UI--canvas相关(渐变、阴影、path)
- EasyUI Datagrid 自定义列、Foolter及单元格编辑
- Easy UI 遮罩(MASK)