iOS深入学习:(UITableView系列3:insertRow)
前面一篇博客,我使用了reloadData来刷新界面,但是这样没有动画效果,那么我这里通过insertRowsAtIndexPaths:withRowAnimation设置动画效果,希望对大家有所帮助。还是在前面的代码基础上面进行微调,点击右侧的BarButtonItem添加元素,这时候我需要添加到_infoArray数据源中的元素是顺序插入的,而不是添加在末尾,这就要求用算法来进行排序,关键代码如下,
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@interface RootViewController ()<UITableViewDelegate,UITableViewDataSource>{ //_infoArray是TableView的数据源 NSMutableArray *_infoArray; //随机添加的数字都来自_numberArray NSMutableArray *_numberArray;}- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view from its nib. //设置导航栏右侧的按钮,并绑定点击事件 UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonItemStylePlain target:self action:@selector(addNumber)]; self.navigationItem.rightBarButtonItem = rightItem; //初始化_numberArray,并且将0~99数字转换成NSNumber,然后加入数组 _numberArray = [[NSMutableArray alloc] initWithCapacity:3]; for(int i = 0;i < 100;i++) { NSNumber *tempNumber = [NSNumber numberWithInt:i]; [_numberArray addObject:tempNumber]; } //初始化数据源数组_infoArray NSNumber *num0 = [NSNumber numberWithInt:1]; NSNumber *num1 = [NSNumber numberWithInt:30]; NSNumber *num2 = [NSNumber numberWithInt:47]; NSNumber *num3 = [NSNumber numberWithInt:68]; NSNumber *num4 = [NSNumber numberWithInt:75]; NSNumber *num5 = [NSNumber numberWithInt:88]; _infoArray = [[NSMutableArray alloc] initWithObjects:num0,num1,num2,num3,num4,num5, nil];} |
这里我初始化了数据源_infoArray,其中的内容为{1,30,47,68,75,88}数字内容,点击导航栏右侧Add按钮,往数据源中顺序插入元素,其绑定的addNumber方法如下所示,
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
- (void)addNumber{ int count = (int)[_numberArray count]; //0~count随机数 int randomIndex = rand()%count; //随机从_numberArray中获取一个元素insertNumber NSNumber *insertNumber = [_numberArray objectAtIndex:randomIndex]; int index = 0; for (NSNumber *tempNumber in _infoArray) { //将要插入的元素与数据源_infoArray中的元素进行大小比较 int insertInt = [insertNumber intValue]; int existInt = [tempNumber intValue]; //因为数据源是顺序排列的,所以如果要插入的数字小于_infoArray数据源中的某个值时候则插入数字 //index是用于记录要插入的位置的 if (insertInt<=existInt) { [_infoArray insertObject:insertNumber atIndex:index]; NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; [indexPaths addObject:indexPath]; [self performSelectorOnMainThread:@selector(insertTableViewRow:) withObject:indexPaths waitUntilDone:YES]; //这里是到主线程中刷新界面,因为现在就是在主线程,所以这段话有点多此一举,可以直接调用下面的代码 //[self insertTableViewRow:indexPaths]; //为什么需要一个break语句呢?因为如果不通过break停止for循环,则会出现插入错误。 break; } index++; } //为了不重复插入_numberArray中的数据,则要将已经插_infoArray数据源中的数据从原来的数组中删除 [_numberArray removeObject:insertNumber];} |
上面的方法就是顺序插入新的元素,同时也要在对应的theTableView行数插入新的row,通过performSelectorOnMainThread的代码在主线程中执行插入row,对应的-insertTableViewRow方法如下所示,
|
1
2
3
4
5
|
- (void)insertTableViewRow:(NSMutableArray *)indexPaths{ [self.theTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; //UITableViewRowAnimationFade是一种渐变淡出的效果,这个在删除行的时候使用比较好,这里使用UITableViewRowAnimationAutomatic动画效果比较好} |
这样,我添加新的元素,更新界面的时候,就有了设置的UITableViewRowAnimationAutomatic或者UITableViewRowAnimationFade渐变的动画效果。
iOS深入学习:(UITableView系列3:insertRow)的更多相关文章
- iOS深入学习(UITableView系列4:使用xib自定义cell)
可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- iOS深入学习(UITableView系列2:reloadData)
接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- ios开发之OC基础-ios开发学习路线图
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- Telegram学习解析系列(二):这我怎么给后台传输数据?
写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- iOS Core Animation 简明系列教程
iOS Core Animation 简明系列教程 看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- Nagios学习实践系列——基本安装篇
开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...
随机推荐
- mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间
mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间,我们在mysql里面他封装了一个内置的时间戳转化的函数,比如我们现在的时间戳是:1458536709 ,"%Y-%m-%d&quo ...
- 在linux中的virtualbox无法挂载usb设备的解决方法
方法来源于网络. 在安装完virtualbox之后,virtualbox会建立一个名为 vboxusers 的组,将你的用户名加入到该组即可. 命令参考: #usermod -a -G vboxuse ...
- Ubuntu + CentOS7 搭建tftp Server
基于Ubuntu系统做的tftp服务器,基于CentOS 7都差不多,书写了关键命令,测试过Ubuntu 12.0.4 和CentOS 7环境 1.介绍tftp服务器 TFTP(Trivial ...
- [笔记]PHP文件系统处理
PHP文件系统处理 ***所有的文件处理都是使用系统函数完成的. ***php文件处理 是 基于linux/unix系统为模型的, 在linux下完全没问题 在windows下有一些 有差别. ### ...
- Angularjs之基本概念梳理(一)
1.Angularjs指令属性ng-app和ng-controller的理解 ng-app指令-标记了AngularJS脚本的作用域,在<html>中添加ng-app属性即说明整个< ...
- Mac Book 上安装Windows 8 / 10 以后安装 Hyper-v 无法正常使用问题---虚拟化已禁止问题
Mac book由于工作需要装了双启动,平时工作用 Windows 10, 由于有些老程序无法启动,还得再装一个虚拟机. 起初装 WMWare 开始装 7.1版本,结果没安装完就直接崩溃重启, 网上反 ...
- css经典布局学习
. 布局 布局是css的重头戏,每个系统的布局都有其各自的特点.无好无坏,肯定是各有优缺点,不妨拿出几个比较典型的例子来一起分析一下.例如: 经典三列布局 Bootstrap栅格布局 百度首页布局 微 ...
- Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值
Thinkphp用exp表达式执行mysql语句,查询某字段不为空is not null,自动增值 Thinkphp 的文档经常不够完整的表达MYSQL的各种组合,is not null在thinkp ...
- linux的mtd架构分析【转】
转自:http://blog.csdn.net/column/details/xgbing-linux-mtd.html linux mtd 嵌入式系统的存储有很多不可靠之处.随着使用容量的增大,现在 ...
- Java局部变量final
局部变量和形参带final. 在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,那么A的局部变量需要定义成final.理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局 ...