iOS开发-OC中TabView的编辑
UITableView编辑
1> UITableView 编辑流程
2> UITableView 编辑步骤(四步)
① 第一步 : 让 TableView 处于编辑状态(在按钮点击事件方法中)
1 // 优化写法
2 // 不带动画
3 _rootView.tableView.editing = !_rootView.tableView.editing;
4 // 带动画
5 [_rootView.tableView setEditing:!_rootView.tableView.editing animated:YES];
② 协议设定
第二步 : 确定cell是否处于编辑状态(UITableViewDataSource协议的方法)
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// 所有的cell都可以进行编辑时,整个方法可以省略
// return YES; // 只有第一个分区可以被编辑
if (0 == indexPath.section) {
return YES;
}
return NO;
}
第三步 : 设定cell的编辑样式 (删除 , 添加)
1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 return UITableViewCellEditingStyle枚举中的样式;
4 }
第四步 : 编辑状态进行添加
1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 // 1. 处理数据
4 // 2. 更新UI界面
5 }
3> 添加(前两步通用)
第三步:
1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 return UITableViewCellEditingStyleDelete;
4 }
第四步:
1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 // 1. 删除数据
4 [_allDataArray[indexPath.section] removeObjectAtIndex:indexPath.row];
5
6 // 2. 更新UI
7 // 单独更新一行(删除)
8 [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
9
10 // 全部更新
11 // [tableView reloadData];
12 }
4> 删除(前两步通用)
第三步:
1 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 return UITableViewCellEditingStyleInsert;
4 }
第四步:
1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 // 1. 插入数据到数组中
4 [_allDataArray[indexPath.section] insertObject:@"你是不是傻" atIndex:indexPath.row + 1];
5
6 // 2. 更新UI
7 // 全部更新
8 // [tableView reloadData];
9
10 // 单独更新一行
11
12 // 创建新一行的NSIndexPath对象
13 NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
14
15 [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationLeft];
16 }
5>添加 和 删除 结合
第三步 : 设置一个 UITableViewCellEditingStyle 类型的 属性(style) 用于存储 添加 和 删除 的编辑的样式,
在 添加 和 删除 对应的点击事件方法中赋值, 注:按钮的功能样式需要在点击事件最上面实现, 否则会出现bug
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return self.style;
}
第四步 :
1 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2 {
3 // 判断编辑样式
4 if (UITableViewCellEditingStyleDelete == editingStyle) {
5 删除操作,详情请见 3> 第四步
6 } else if (UITableViewCellEditingStyleInsert == editingStyle){
7 添加操作,详情请见 4> 第四步
8 }
9 }
6> 移动
① (在 TableView 处于编辑状态下)实现协议: 告诉 tableView 是否能够移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
② 移动
1 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
2 {
3 // 1. 获取需要修改的数据
4 NSString *sourceData = [self.allDataArray[sourceIndexPath.section] objectAtIndex:sourceIndexPath.row];
5
6 // 2. 先将数据从当前的位置移除
7 [self.allDataArray[sourceIndexPath.section] removeObjectAtIndex:sourceIndexPath.row];
8
9 // 3. 将数据插入到对应的位置
10 [self.allDataArray[destinationIndexPath.section] insertObject:sourceData atIndex:destinationIndexPath.row];
11 }
bug修正--- 防止跨分区移动
1 - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
2 {
3 // sourceIndexPath 为原位置
4 // proposedDestinationIndexPath 为将要移动到的位置
5 if (sourceIndexPath.section == proposedDestinationIndexPath.section) {
6 return proposedDestinationIndexPath;
7 } else {
8 return sourceIndexPath;
9 }
10 }
UITableViewController
1> 概述
UITableViewController 是继承于 UIViewController 中的一个类,只不过比UIViewController 中多了一个属性 tableView 。
即: UITableViewController 是一个自带 table 的视图控制器。
2> 注意事项
- UITableViewController 继承 UIViewController , 自带一个tableView
- self.view 不是 UIView 是 UITableView
- datasource 和 delegate 默认都是 self (UITableViewController)
- 开发中只需要建 UITableViewController 子类
iOS开发-OC中TabView的编辑的更多相关文章
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
- iOS开发 Xcode8中遇到的问题及改动
iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...
- iOS开发——基础篇——iOS开发 Xcode8中遇到的问题及改动
iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
- iOS开发——OC篇&纯代码退出键盘
关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 ...
- iOS开发-OC语言 (一)oc数据类型
分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...
- iOS开发——OC篇&常用关键字的使用与区别
copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别 最近在学习iOS的 ...
- iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)
iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action) 今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Fou ...
- iOS开发-OC数据类型
以下是OC中的实例,Swift部分不适用 iOS中的注释 // 单行注释 // 注释对代码起到解释说明的作用,注释是给程序员看的,不参与程序运行 /* 多行注释 Xcode快捷键 全选 cm ...
随机推荐
- C++中不同变量、函数在内存中的内存情况《转》
一.一个C++编译的程序占用的内存分为以下几个部分 1.栈区:由编译器自动分配 存放函数的参数值,局部变量的值等,操作方式类似于数据结构中的栈. 2.堆区:一般由程序员分配释放,若程序员不释放,程序结 ...
- checkBox半选中状态
checkbox 可以半选中,这个特性,很多浏览器都支持 // 用 input.indeterminate 这个属性来获取或者设置半选中状态,必须要用 js 添加属性,才有效果. input.inde ...
- python xlsxwriter库生成图表的应用
xlsxwriter可能用过的人并不是很多,不过使用后就会感觉,他的功能让你叹服,除了可以按要求生成你所需要的excel外 还可以加上很形象的各种图,比如柱状图.饼图.折线图等. 请看本人生成的: 这 ...
- 【翻译】《向“弹跳球”演示程序添加新功能》 in MDN
文章地址: https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/%E5%90%91%E2%80%9C%E5%BC%B9% ...
- 作为一个懒虫,如何优雅的使用windows
懒虫windows系列(一) 首先是快捷键,因为自己太懒了,觉得用鼠标很麻烦,下面总结一下自己最常用的快捷键(windows10 ) Ctrl+Shift+N:新建文件夹 F2:重命名 Ctrl + ...
- Redis 桌面管理器
使用Redis桌面管理器,可以方便开发人员进行开发测试,对Redis存储内容进行可视化管理. 下载安装:https://redisdesktop.com/download 1. 为了方便测试,打开re ...
- gnuplot画图中文标注相关问题
gnuplot是一个基于命令行的开源跨平台画图工具包,画图功能非常丰富.不过最近在考虑如何在gnuplot图中添加中文标注的过程中遇到了一些问题,记录如下. gnuplot支持多种的输出格式,比如pn ...
- 怎么用secureCRT连接Linux
首先要安装linux,参看:http://www.cnblogs.com/shenjieblog/p/5061282.html 然后要安装secureCRT,参看:http://www.cnblogs ...
- 【Unity与23种设计模式】解释器模式(Interpreter)
GoF中定义: "定义一个程序设计语言所需要的语句,并提供解释来解析(执行)该语言." 传统上,执行程序代码通常通过两种方式 第一种:编译程序 第二种:解释器 常见的使用解释器的程 ...
- AIX分页(交换)空间的监控
1.分页和交换 这两个概念,很多人混为一回事儿,两者虽然有共性,但也有些差别.分页是进程的部分内容在RAM和磁盘的分页空间间移动,而交换是整个进程在RAM和磁盘的分页空间间移动,在将进程移到磁盘分页空 ...