今天博主有一个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

转载于:https://www.cnblogs.com/Twisted-Fate/p/4727766.html

iOS开发日记1-tableview编辑相关推荐

  1. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  2. iOS开发--TableView详细解释

    -.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTa ...

  3. iOS开发日记24-详解RunLoop

    今天博主有一个RunLoop的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. RunLoop是什么? 从字面上理解,Runloop指的就是运行循环,iOS中,只要程序启动, 就会创建Run ...

  4. iOS开发日记54-Xcode7调试神技

    今天博主有一个升级Xcode7的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 1.Address Sanitizer: 再也不用担心 EXC_BAD_ACCESS EXC_BAD_ACC ...

  5. ios开发日记- 5 屏幕截图

    -(void)fullScreenshots{ UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow]; UIGr ...

  6. ios开发日记-18上传appStore时,遇到错误,代码为ERROR ITMS-90049

    上传appStore时,遇到错误,代码为ERROR ITMS-90049 解决问题方式:  1. 在xcode左下角搜索info.plist 找到第三方的info.plist文件,如友盟中腾讯Api文 ...

  7. iOS开发日记4-第三方登录(ShareSDK)

    今天博主有一个第三方登录的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 第三方登录的方法很多,最直接的方法就是去各大开发者平台申请id之后看官方文档直接集成,当然也有偷懒的方法.类似博主 ...

  8. ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager

    我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种.我们需要监听键盘事件,考虑点击背景收起键盘.考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套.这个库帮我们解决了这个事情. 这 ...

  9. iOS开发日记46-倒计时效果的实现

    今天博主有一个倒计时效果的实现的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 首先在需要用到的地方解析总的倒计时时间,博主没有封装,各位看官可以自行封装 #pragma mark---- ...

最新文章

  1. 计算机应用为什么要学机械制图,机械制图为什么这么难学?
  2. HDU - 2871 Memory Control(线段树+区间合并)好题!
  3. 升级为Exchange 2007后怀念的10件事
  4. Apollo进阶课程㉚丨Apollo ROS背景介绍
  5. mysql 报错解决思考Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  6. 企业云存储采用率将在2017年飙升
  7. 基于IDEA的JavaWeb开发环境搭建
  8. 计算机word的常用功能技巧,10个Word操作神技巧,看看你会多少?
  9. 企业生存与发展的前提是安全
  10. 文件夹批量重命名001开始的方法
  11. Justoj 2388最短区间 贪心
  12. 【Godot】加载文件数据
  13. 点云配准5:4pcs算法在pcl上的实现
  14. Spring AOP 学习笔记
  15. 物联网发展历程,一步步从概念走向了成熟
  16. Python抓取糗事百科网页信息以及源码下载
  17. NLTK读书笔记 — 分类与标注
  18. javamail 可以发邮件,发附件(附件大小可以超过2M),抄送多人,抄送密件,定时发送,消除乱码[附javamail的jar包]...
  19. edge打开时被360首页恶意绑定
  20. lv双肩包尺寸对照表_这10个最火的LV双肩包,我就是不要好好背!

热门文章

  1. sencha touch中实现页面之间的互相跳转
  2. Windows 7使用wubi硬盘安装Ubuntu (文字版)
  3. 用 API 提取、写入指定网站的 Cookie - 回复 bangrj 的问题
  4. 第 28 小时项目管理过程实践和案例分析
  5. xss跨站脚本,纯安全测试干货分享-建议收藏
  6. win10安装java+hadoop+spark
  7. 翟树卿:如何让数据挖掘助力精准化营销
  8. 关于Linux和Windows双系统共存时间问题
  9. PHP 开发环境和组织管理
  10. Nginx的配置文件nginx.conf详解