UITableView的常用编辑操作

今天刚学了UItableView,在此总结了一些易忘的小操作。代理协议中的方法虽然很多,但是其实是有规律的,很多操作都是要先让某项操作可执行,然后再实现该方法。对应代码就是: 一个方法以BOOL为返回值,一个方法以void为返回值。下面的代码以hero为模型,该模型有三个属性,头像icon、名字name、介绍intro。具体代码如下


一、移动tableView中的行


1.要使每一行为可编辑状态 
self.tableView.editing = YES;
2.使每一行行可以移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
3.控制器监听到移动后,交换模型数组中两个模型的数据.(不需要刷新)
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    [self.herosArray exchangeObjectAtIndex:destinationIndexPath.row withObjectAtIndex:sourceIndexPath.row];
}



二、tableView的复制、粘贴、剪贴操作
1.显示拷贝、粘贴选项板
- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
2.实现某个方法(判断是不是拷贝、粘贴、剪切方法,是的话重新赋值模型数据,刷新)
// 在tableView的这一行执行某个方法
- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender
{
    // 1.取出当前行的模型
    Hero *hero = self.herosArray[indexPath.row];
    // 1.1如果当前操作为拷贝操作
    if (action == @selector(copy:)) {
        // 1.2剪贴板记录下该模型的所有数据
        [UIPasteboard generalPasteboard].strings = @[hero.name, hero.intro, hero.icon];
        
    }
    // 如果为粘贴操作,给模型赋值新的数据,并刷新该行
    if (action == @selector(paste:)) {
        hero.name = [UIPasteboard generalPasteboard].strings[0];
        hero.intro = [UIPasteboard generalPasteboard].strings[1];
        hero.icon = [UIPasteboard generalPasteboard].strings[2];
        NSIndexPath *tempIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
        [self.tableView reloadRowsAtIndexPaths:@[tempIndexPath] withRowAnimation:UITableViewRowAnimationLeft];
    }
    // 如果当前为剪切操作
    if (action == @selector(cut:)){
        [UIPasteboard generalPasteboard].strings = @[hero.name, hero.intro, hero.icon];
        hero.name = nil;
        hero.icon = nil;
        hero.intro = nil;
        NSIndexPath *tempIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
        [self.tableView reloadRowsAtIndexPaths:@[tempIndexPath] withRowAnimation:UITableViewRowAnimationLeft];
    }
    
}



三、在tableView中插入一行


1.修改编辑模式为插入
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleInsert;
}
2.检测插入操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleInsert) {
        Hero *hero = [[Hero alloc] init];
        hero.name = @"日番谷、冬狮郎";
        hero.intro = @"十番队、队长";
        hero.icon = @"1385536285032.png";
        [self.herosArray insertObject:hero atIndex:indexPath.row];
        
        // 插入一行,有动画,不需要手动刷新
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
    }
}


四、在tableView中删除某一行
1.修改cell的编辑模式为删除
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ViewCellEditingStyleInsert;
    return UITableViewCellEditingStyleDelete;
}


2.进行删除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
      
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self.herosArray removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];
    }
}

你可能感兴趣的:(UITableView的常用编辑操作)