今天刚学了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];
}
}