点击cell会置顶,其他的下移

第一,引入代理

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

第二,实现

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.itemList = [[NSMutableArray alloc] init];
    //存放置顶数据的数组
    NSMutableArray *topArray = [[NSMutableArray alloc] init];
    //存放不置顶数据的数组
    NSMutableArray *normalArray = [[NSMutableArray alloc] init];
    [self.itemList addObject:topArray];
    [self.itemList addObject:normalArray];
    
    [normalArray addObject:@"1"];
    [normalArray addObject:@"2"];
    [normalArray addObject:@"3"];
    [normalArray addObject:@"4"];
    [normalArray addObject:@"5"];
    [normalArray addObject:@"6"];
    [normalArray addObject:@"7"];
    [normalArray addObject:@"8"];
    [normalArray addObject:@"9"];
    [normalArray addObject:@"10"];
    [normalArray addObject:@"11"];
    [normalArray addObject:@"12"];
    
    
    CGRect frame = {0,20,320,460};
    UITableView *tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStylePlain];
    tableView.delegate = self;
    tableView.dataSource = self;
    [self.view addSubview:tableView];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//设置一共有2个分区,分别做为置顶区与正常区
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //根据分区号,获取对应的存放容器
    NSArray *itemArray = [self.itemList objectAtIndex:section];
    return itemArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //根据分区号,获取对应的存放容器
    NSArray *itemArray = [self.itemList objectAtIndex:indexPath.section];
    //指定置顶区的唯一标识符..
    static NSString *topIdentifier = @"topIdentifier";
    //指定正常区的唯一标识符
    static NSString *normalIdentifier = @"normalIdentifier";
    
    //声明返回的变量名
    UITableViewCell *cell = nil;
    
    switch (indexPath.section) {
        case 0://置顶区域
        {
            cell = [tableView dequeueReusableCellWithIdentifier:topIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:topIdentifier];
            }
            cell.textLabel.text = itemArray[indexPath.row];
            break;
        }
        case 1://正常区域
        {
            cell = [tableView dequeueReusableCellWithIdentifier:normalIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:normalIdentifier];
            }
            cell.backgroundColor = [UIColor whiteColor];
            cell.textLabel.text = itemArray[indexPath.row];
        }
    }
    NSLog(@"22222222");
    //返回单元格
    return cell;
}

//通过点击单元格完成置顶操作...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //如果点击的是置顶分区则直接返回..
    if (indexPath.section == 0) {
        return;
    }
    //否则,则点击的是正常分区,开始整理数据...
    NSMutableArray *topArray = [self.itemList objectAtIndex:0];
    NSMutableArray *normalArray = [self.itemList objectAtIndex:1];
    
    //正常区域的点击数据
    NSString *item  = [normalArray objectAtIndex:indexPath.row];
    
    [tableView beginUpdates];//数据数据改变数据,tableview做相应的刷新
    //当置顶区域的置顶条数大于等于3时,将置顶区域的最后一个元素移除并且添加到正常区域的第一条
    if (topArray.count >= 3)
    {
        //置顶区域的最后一条数据
        NSString *lastTopItem  = [topArray lastObject];
        [normalArray insertObject:lastTopItem atIndex:0];
        [topArray removeObject:lastTopItem];
        //第二行
        NSIndexPath *lastTopIndexPath = [NSIndexPath indexPathForRow:2 inSection:0];
        NSIndexPath *headNormalIndexPath = [NSIndexPath indexPathForRow:0 inSection:1];
        [tableView moveRowAtIndexPath:lastTopIndexPath toIndexPath:headNormalIndexPath];
    }
    //当置顶区域的置顶条数小于3时,直接添加进置顶数组,并且从正常区域移除该对象...
    [topArray insertObject:item atIndex:0];
    [normalArray removeObject:item];
    
    NSIndexPath *topIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [tableView moveRowAtIndexPath:indexPath toIndexPath:topIndexPath];
    
    [tableView endUpdates];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *title = nil;
    switch (section) {
        case 0:
            title = @"置顶的啊";
            break;
        case 1:
            title = @"普通的啊";
        default:
            break;
    }
    return title;
}

IOS 作业项目 TableView两个section中cell置顶功能实现的更多相关文章

  1. 【代码笔记】iOS-一个tableView,两个section

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  2. IOS 作业项目(4)步步完成 画图 程序(中续)

    一,程序布局整理 前言://1,程序启动//2,程序流程框架//3,程序界面一致//4,程序界面功能, //这里只做页面的固定功能, //在首次创建界面时,我们会指定好固定事件触发前的固定方法 //至 ...

  3. IOS 作业项目(4)步步完成 画图 程序(中)

    一,承接上文,继续本文  [UIButton buttonWithType:UIButtonTypeRoundedRect]; 如此声明的按钮才会有点击闪动的效果!如果直接frame方式声明就不会有. ...

  4. IOS 作业项目(2) 画图(保存,撤销,笔粗细设定功能)

    先上效果图

  5. [IOS 开发]TableView如何刷新指定的cell 或section

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:]; [tableview reloadSections:ind ...

  6. IOS 作业项目(4)步步完成 画图 程序(剧终)

    // //  CHViewController.m //  SuperDrawingSample // //  Created by JaikenLI on 13-11-21. //  Copyrig ...

  7. IOS 作业项目(4)步步完成 画图 程序(上)

    先上流程图

  8. [iOS微博项目 - 2.2] - 在app中获取授权

    github: https://github.com/hellovoidworld/HVWWeibo   A.发送授权请求 1.使用UIWebView加载请求页面 自定义一个继承UIViewContr ...

  9. IOS 作业项目(1) 关灯游戏 (百行代码搞定)

    1,准备工作,既然要开关灯,就需要确定灯的灯的颜色状态 首先想到的是扩展UIColor

随机推荐

  1. hdu----(1466)计算直线的交点数(dp)

    计算直线的交点数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. MVC中处理Json和JS中处理Json对象

    MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...

  3. Div样式查看器

    编写div属性时,经常需要尝试不同的样式,可以用Javascript写一个简单的div样式查看器,方便日常操作: <!DOCTYPE html> <html> <head ...

  4. syslog简介——系统日志写入API

    一.简介 syslog是Linux系统默认的日志守护进程.默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件.通常,syslog 接受 ...

  5. BZOJ1937 [Shoi2004]Mst 最小生成树

    首先由贪心的想法知道,树边只减不加,非树边只加不减,令$w_i$表示i号边原来的边权,$d_i$表示i号边的改变量 对于一条非树边$j$连接着两个点$x$.$y$,则对于$xy$这条路径上的所有树边$ ...

  6. jdk、jre、jvm的关系

    JDK里面的工具也是用JAVA编写的,它们本身运行的时候也需要一套JRE,如C:\Program Files\Java\jdk1.5.x\目录下的JRE.而C:\Program Files\Java\ ...

  7. 让你的WPF程序使用多线程——BackgroundWorker

    在wpf中可以使用许多方法执行异步操作.利用.NET的芳芳就是手动创建一个新的System.Threading.Thread对象,提供一步代码,并使用THread.Start()方法加载代码.这种方法 ...

  8. ASP.NET MVC的Ajax.ActionLink 的HttpMethod="Get" 一个重复请求的BUG

    这段时间使用BootStrap+Asp.net Mvc5开发项目,Ajax.ActionLink遇到一个重复提交的BUG,代码如下: @model IList<WFModel.WF_Temp&g ...

  9. 类似UC天气下拉和微信下拉眼睛头部弹入淡出UI交互效果(开源项目)。

    Android-PullLayout是github上的一个第三方开源项目,该项目主页是:https://github.com/BlueMor/Android-PullLayout  原作者项目意图实现 ...

  10. 常州培训 day7 解题报告

    最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元  n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...