前面一篇博客,我使用了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)的更多相关文章

  1. iOS深入学习(UITableView系列4:使用xib自定义cell)

    可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. iOS深入学习(UITableView系列2:reloadData)

    接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...

  3. 开源中国iOS客户端学习

    开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html ...

  4. ios网络学习------6 json格式数据的请求处理

    ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...

  5. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  6. Telegram学习解析系列(二):这我怎么给后台传输数据?

    写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetwor ...

  7. Socket学习总结系列(二) -- CocoaAsyncSocket

    这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...

  8. iOS Core Animation 简明系列教程

    iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽 ...

  9. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  10. Nagios学习实践系列——基本安装篇

    开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...

随机推荐

  1. 动态时间规整(DTW) 转载

    Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较广,主要是在模板匹 ...

  2. 在linux中搭建git服务器

    个人觉得, 以下搭建git服务器的过程就像是在linux增加了一个用户, 而这个用户的登录shell是 git-shell, 太刨根问底的东西我也说不清楚, 还是看下面的过程吧. 过程参考了网上的文章 ...

  3. copyallwaterdata

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[copyallwaterdata]') and OBJECT ...

  4. js数组基础知识链接

    http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 小案例:   <script language=&quo ...

  5. SDK Manager failed to install 'java.exe' locking directory

    转自:http://stackoverflow.com/questions/13587478/sdk-manager-failed-to-install-java-exe-locking-direct ...

  6. 视频处理控件TVideoGrabber部分技术问题解答

    TVideoGrabber是一个功能全面.易于使用的视频捕捉工具和多媒体播放器,本文搜集了一些TVideoGrabber的技术问答,并针对于有的朋友遇到的疑难给出了解答. 一.在TVideoGrabb ...

  7. 160902、Ionic、Angularjs、Cordova搭建Android开发环境

    1.jdk 环境变量配置 path:C:\Program Files\Java\jdk1.7.0_79\bin 2.node.js 因为安装cordova时要用到node.js的npm 下载地址: h ...

  8. MySQL 5.7 SYS系统SCHEMA

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典.从此可以 ...

  9. eclipse运行时编码设置

    eclipse运行时编码设置:

  10. PHP高级架构技术年度大盘点

    2015年1月的最后一个周末,上海的冬季虽不如北方的雪窖冰天,但腊月的寒风也足以让人猫 在家中不愿出门.可是,在华美达酒店的一个会议室中,却人声鼎沸.春意融融,第三期商派技术沙龙正在火热进行,本期沙龙 ...