iOS开发日记1-tableview编辑

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

今天博主有一个tableview编辑的需求,遇到了一些困难点,在此和大家分享,能够共同进步.

tableview的编辑是通过[self.tableview setEditing: BOOL1 animotion: BOOL2];进入的,如果需要进入编辑模式,则调用方法,将BOOL1改为YES.如果要退出编辑模式,则调用方法,将BOOL1改为NO.BOOL2为是否使用动画.

如果你想将编辑这个button由文字改为图片,想通过setBackGroudImage这个方法替换文字,你会发现图片会因为无法设置frame而产生拉伸,效果不理想.解决方法:你可以自定义rightBarButtonItem,重写代理方法.下面将tableview的编辑的代码贴出来,与大家分享

- (void)viewDidLoad {

[super viewDidLoad];

//编辑按钮

self.navigationItem.rightBarButtonItem = self.editButtonItem;

self.navigationItem.rightBarButtonItem.title = @"编辑";

self.navigationItem.rightBarButtonItem.tintColor=[UIColor blackColor];

}

#PRagma mark---------tableView的编辑(删除,插入)

//点击编辑按钮

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

[super setEditing:editing animated:animated];

// Don't show the Back button while editing.

// [self.navigationItem setHidesBackButton:editing animated:YES];

if (editing) {

self.navigationItem.rightBarButtonItem.title = @"完成";

NSLog(@"abc");

}else {//点击完成按钮

self.navigationItem.rightBarButtonItem.title = @"编辑";

NSLog(@"123");

}

[_customView.tableView setEditing:editing animated:YES];

}

//2.设置定制分区(section)中的行(row)是否可以被编辑

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

{

// if (indexPath.section==0) {

// return NO;

// }

return YES;

}

//3.设置指定的分区(section)的行(row)编辑的样式(添加,删除)

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{

if (indexPath.section==1) {

return UITableViewCellEditingStyleInsert;

}

return UITableViewCellEditingStyleDelete;

}

//4.编辑完成(先操作数据源,再修改UI)

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

if (editingStyle==UITableViewCellEditingStyleDelete) {

NSLog(@"删除");

//同步更新beginUpdates 和 endUpdates 之间修改的UI和数据

[_customView.tableView beginUpdates];

//1.删除数据

NSString *key=_allDataDic.allKeys[indexPath.section];

NSMutableArray *array=_allDataDic[key];

[array removeObjectAtIndex:indexPath.row];

//2.删除UI

//删除行

[_customView.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

if (array.count==0) {

//删除区头上的数据(删除key对应的小数组)

NSString *key=_allDataDic.allKeys[indexPath.section];

[_allDataDic removeObjectForKey:key];

//当某个分区中只剩一个cell的时候(或者小数组中只剩一个数据的时候),删除时,也要把区头删除掉

NSIndexSet *indexSet=[NSIndexSet indexSetWithIndex:indexPath.section];

[_customView.tableView deleteSections:indexSet withRowAnimation:UITableViewRowAnimationLeft];

}

[_customView.tableView endUpdates];

}else if (editingStyle==UITableViewCellEditingStyleInsert)

{

NSLog(@"插入");

//1.插入数据

NSString *key=_allDataDic.allKeys[indexPath.section];

NSMutableArray *array=_allDataDic[key];

[array insertObject:@"昌平" atIndex:indexPath.row];

//2.插入UI(cell)

// NSIndexPath *indexPath1=[NSIndexPath indexPathForRow:0 inSection:indexPath.section];//保证每次插入数据都在第一行

[_customView.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];

}

}

http://www.jianshu.com/p/7c3d72fd9616?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航