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渐变的动画效果。

时间: 2024-10-11 20:09:30

iOS深入学习:(UITableView系列3:insertRow)的相关文章

IOS UI学习 UITableView Demo 实现类似QQ联系人收起和展开效果

UItableView 日常学习总结 实现类似 QQ联系人收起和展开的效果 思路 就是 自定义Header 在它上面添加一个Button 或者一个点击手势 ,我是添加了一个手势 每一个分区设置一个状态为表示为收起和展开  (bool 型 即可) 当判断为收起时将分区 section的row数量设置为0,即不显示任何内容 当判断为展开时将分区 section的row数量设置为要显示的内容的数目 然后重载分区即可 重载分区方法 1 //重载分区 2 [_tableV reloadSections:[

IOS UI学习 UITableView ----- UITableViewDataSource

UITableView派生自UIScrollView UITableView结构如下: 背景是滚动视图,每个横向的表格称为cell ( UITableViewCell ) 每一个 cell 既可以存储数据,也可以接受选中的事件, 我们选中某个cell时,可以下拉列表,可以推出新的页面 在编辑模式选中多个cell,可以批量删除等. 成员变量 1 { 2 UITableView * _tableV; 3 NSMutableArray * _dataArr; 4 UISearchController

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

可以通过继承UITableViewCell重新自定义cell,可以像下面一样通过代码来自定义cell,但是手写代码总是很浪费时间, ? 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 32 33 34 //CustomTableViewCell.h文件 @interface CustomTableViewCell:UITableViewCell @property (nonat

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

接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@"One",@"Two",@"Three",@"Four"},如果数组的内容增加了,该怎样刷新UITableView界面的内容呢?答案是通过reloadData方法,下面我就来模拟一个场景,点击导航栏右侧的ButtonItem,向可变

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

【iOS知识学习】_iOS动态改变TableView Cell高度

在做tableView的时候,我们有时候需要根据cell的高度动态来调整,最近在网上看到一段代码不错,跟大家Share一下. 在 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 类中获取cell的高度: CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX); cell.textLabel.text

iOS Core Animation 简明系列教程

iOS Core Animation 简明系列教程  看到无数的CA教程,都非常的难懂,各种事务各种图层关系看的人头大.自己就想用通俗的语言翻译给大家听,尽可能准确表达,如果哪里有问题,请您指出我会尽快修改. 1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合.它就是一个framework.通过CoreAnimation提供的接口,你可以方便完成自己所想要的动画. 2.我眼中的Core Animation? 动画和拍电影一样,而我们就如同导演一样,全权负责这场

iOS开发之UITableView全面解析

在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不开它强大的功能,今天这篇文章将针对UITableView重点展开讨论.今天的主要内容包括: 1.基本介绍 2.数据源 3.代理 4.性能优化 5.UITableViewCell 6.常用操作 7.UITableViewController 8.MVC模式   基本介绍 UITableView有两种风

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

写在前面: 在iOS开发的过程中,有很多时候我们都在和数据打交道,最基本的就是数据的下载和上传了,估计很多很多的小伙伴都在用AFNetworking与后台数据打交道,可有没有想过,哪天AFNetworking你不能用了或者不会用了怎么办?可能你心中疑惑了,这三方只要更新,存在怎么会不能用或者我怎么会不会用了,在没有看Telegram源码之前,我也是这么想的,看了Telegram源码就不会再这么想了,以后我会把自己看的Telegram源码部分的总结和经验一点点的整理分享出来,整理成这个Telegr

ios网络学习------7 xml格式数据的请求处理

用NSXMLParser解析XML文件过程: 1 创建NSXMLParser实例,并传入从服务器接收XML数据. 2 定义解析器代理 3 解析器解析. 4 通过解析代理方法完成XML数据的解析. #pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里