您的位置:首页 > 产品设计 > UI/UE

UITableViewCell的标记、移动、删除、插入

2014-01-12 22:12 375 查看
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://blog.csdn.net/duxinfeng2010/article/details/7725897)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息