原文 :  http://blog.csdn.net/youcanping2008/article/details/9202167

一、实现原理:就是在点击表格组头视图的时候,如果该表格视图的组展开了,就把改组的行设置为0,如果该组隐藏了,就显示该组的所有行。

效果如下:

二、实现步骤

1、定义一个数据模型用于封装数据

  1.  #import <Foundation/Foundation.h>  
    
     @interface MyData : NSObject
    {
    NSMutableArray *_array;// 每组的数据
    BOOL _isShow;// 组的状态,yes显示组,no不显示组
    NSString *_name;// 组名
    }
    @property (nonatomic,retain) NSMutableArray *array;
    @property (nonatomic,copy) NSString * name;
    @property (nonatomic,assign) BOOL isShow;
    @end

2、添加数据源

  1.  - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // 全局的数据源
    dataArray = [[NSMutableArray alloc] init];
    // 添加数据
    for (int i='A'; i<='Z'; i++) {
    MyData *myData = [[MyData alloc] init];
    myData.name = [NSString stringWithFormat:@"%c",i];
    for (int j=; j<; j++) {
    [myData.array addObject:[NSString stringWithFormat:@"%c-%d",i,j]];
    }
    [dataArray addObject:myData];
    }
    myTableView = [[UITableView alloc] initWithFrame:CGRectMake(, , , -) style:UITableViewStylePlain];
    myTableView.dataSource = self;
    myTableView.delegate = self;
    myTableView.rowHeight = ;
    [self.view addSubview:myTableView];
    }

3.实现表格的代理方法

  1.  // 组数
    - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
    {
    return [dataArray count];
    }
    // 根据状态来判断是否显示该组,隐藏组把组的行数设置为0即可
    - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    MyData *data = [dataArray objectAtIndex:section];
    if ([data isShow]) {
    return [[data array] count];
    }else{
    return ;
    }
    }
    // 添加每行显示的内容
    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *cellName = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName ];
    if (!cell) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName] autorelease];
    }
    MyData *data = [dataArray objectAtIndex:indexPath.section];
    NSString *str = [[data array] objectAtIndex:indexPath.row];
    cell.textLabel.text = str;
    return cell;
    }

4.自定义组的头标题视图,添加点击事件

    1.  // 定义头标题的视图,添加点击事件
      - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
      {
      MyData *data = [dataArray objectAtIndex:section]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
      btn.frame = CGRectMake(, , , );
      [btn setTitle:data.name forState:UIControlStateNormal];
      btn.tag = section;
      [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
      if (section%) {
      btn.backgroundColor = [UIColor darkGrayColor];
      }else{
      btn.backgroundColor = [UIColor lightGrayColor];
      }
      return btn;
      }
      - (void) btnClick:(UIButton *)btn
      {
      MyData *data = [dataArray objectAtIndex:btn.tag];
      // 改变组的显示状态
      if ([data isShow]) {
      [data setIsShow:NO];
      }else{
      [data setIsShow:YES];
      }
      // 刷新点击的组标题,动画使用卡片
      [myTableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationFade];
      }

【转】 iOS如何实现表格的折叠效果?的更多相关文章

  1. iOS图片折叠效果:Layer的contentsRect属性和渐变层

    http://www.cocoachina.com/ios/20150722/12622.html 作者:@吖了个峥 授权本站转载. 前言 此次文章,讲述的是Layer的一个属性contentsRec ...

  2. jQuery treetable【表格多重折叠树功能及拖放表格子元素重新排列】

    今天有个表格需求做到多重折叠子元素功能,仔细想了下实现原理, 1.在html中,把父子节点的关系写在自定义属性,但对于节点是否有孩子(hasChild),是否是最后一个节点(isLastOne),是否 ...

  3. 创意设计展示:折叠效果在移动 App 中的应用

    在今天在移动 App 界面设计中,你可以看到不同创意类型的视觉效果.特别是在 Dribbble 上面,有有很多应用程序的 UI 概念设计,让你惊叹.当然,他们大多只是作为一个概念设计,可能永远也不会成 ...

  4. css3折叠效果

    在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 说到折纸,我们先看下图 这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用cs ...

  5. jQuery文本段落展开和折叠效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  6. jq菜单折叠效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. BootStrap入门教程 (四) :JQuery类库插件(模态窗口,滚动监控,标签效果,提示效果,“泡芙”效果,警告区域,折叠效果,旋转木马,输入提示)

    上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很好地应用在生产环境.这些组件包括按钮(Button),导航(Navigation),缩略图( thumbnails),提醒(Alert) ...

  8. 实现类似QQ的折叠效果

    //  主要核心是点击自定义header来展开和收起每一组里面的cell,模型里面应该有isShow此属性来记录开展还是收起. //  ViewController.m//  实现类似QQ的折叠效果/ ...

  9. Swift 2.0 封装图片折叠效果

    文/猫爪(简书作者)原文链接:http://www.jianshu.com/p/688c491580e3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 用Swift封装图片折叠效果 b ...

随机推荐

  1. 关于 Boolean 的转换

    前端经常喜欢这样写 if else if(value) { //do something } javascript 能智能的把任何类型的 value 转换成 boolean 来进行 if 判断 转换是 ...

  2. 以Facebook为案例剖析科技公司应有的工具文化

    http://www.36kr.com/p/146507.html 编者按:本文由 @王淮Harry哥 撰写,摘自他即将出版的新书.王淮是 Facebook 早期员工,中国藉第二位工程师第一位研发经理 ...

  3. Color the Fence

    Codeforces Round #202 (Div. 2) B:http://codeforces.com/problemset/problem/349/B 题意:给你一些颜料,然后你可以用这些颜料 ...

  4. DB2中时间格式化

    values to_char(current timestamp - 7 hours,'hh24')||'点' values varchar(hour(current time + 5 hour))| ...

  5. Linux Shell编程(5)——shell特殊字符(下)

    {}代码块[花括号]. 这个结构也是一组命令代码块,事实上,它是匿名的函数.然而与一个函数所不同的,在代码块里的变量仍然能被脚本后面的代码访问. bash$ { local a;      a=123 ...

  6. POJ 3468 A Simple Problem with Integers(详细题解) 线段树

    这是个线段树题目,做之前必须要有些线段树基础才行不然你是很难理解的. 此题的难点就是在于你加的数要怎么加,加入你一直加到叶子节点的话,复杂度势必会很高的 具体思路 在增加时,如果要加的区间正好覆盖一个 ...

  7. 【转】JAVA程序中Float和Double精度丢失问题

    原文网址:http://blog.sina.com.cn/s/blog_827d041701017ctm.html 问题提出:12.0f-11.9f=0.10000038,"减不尽" ...

  8. interview material

    Articles Recommended: Steve Yegge – Get That Job at Google [web] Carlos Bueno – Get That Job at Face ...

  9. lightoj 1011 最大权重匹配或最大费用流

    由于暂时不会KM算法,只能用最大费用流来做了. 题目链接:http://lightoj.com/volume_showproblem.php?problem=1011 #include <cst ...

  10. 301重定向与CNAME

    CNAME记录是域名指向另一个域名A记录是域名指向IP地址URL跳转是打开这个网址的时候会跳转到另一个指定的网址,URL跳转分为301永久重定向和302临时重定向. 301永久重定向会使搜索引擎抓取新 ...