【转】 iOS如何实现表格的折叠效果?

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

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

效果如下:

二、实现步骤

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

[cpp] view plaincopy

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

2、添加数据源

[cpp] view plaincopy

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. // Do any additional setup after loading the view.
  5. // 全局的数据源
  6. dataArray = [[NSMutableArray alloc] init];
  7. // 添加数据
  8. for (int i=‘A‘; i<=‘Z‘; i++) {
  9. MyData *myData = [[MyData alloc] init];
  10. myData.name = [NSString stringWithFormat:@"%c",i];
  11. for (int j=0; j<10; j++) {
  12. [myData.array addObject:[NSString stringWithFormat:@"%c-%d",i,j]];
  13. }
  14. [dataArray addObject:myData];
  15. }
  16. myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460-44) style:UITableViewStylePlain];
  17. myTableView.dataSource = self;
  18. myTableView.delegate = self;
  19. myTableView.rowHeight = 30;
  20. [self.view addSubview:myTableView];
  21. }

3.实现表格的代理方法

[cpp] view plaincopy

  1. // 组数
  2. - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
  3. {
  4. return [dataArray count];
  5. }
  6. // 根据状态来判断是否显示该组,隐藏组把组的行数设置为0即可
  7. - (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  8. {
  9. MyData *data = [dataArray objectAtIndex:section];
  10. if ([data isShow]) {
  11. return  [[data array] count];
  12. }else{
  13. return  0;
  14. }
  15. }
  16. // 添加每行显示的内容
  17. - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  18. {
  19. static NSString *cellName = @"Cell";
  20. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName ];
  21. if (!cell) {
  22. cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName] autorelease];
  23. }
  24. MyData *data = [dataArray objectAtIndex:indexPath.section];
  25. NSString *str = [[data array] objectAtIndex:indexPath.row];
  26. cell.textLabel.text = str;
  27. return cell;
  28. }

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

[cpp] view plaincopy

    1. // 定义头标题的视图,添加点击事件
    2. - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    3. {
    4. MyData *data = [dataArray objectAtIndex:section];
    5. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    6. btn.frame = CGRectMake(0, 0, 320, 30);
    7. [btn setTitle:data.name forState:UIControlStateNormal];
    8. btn.tag = section;
    9. [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
    10. if (section%2) {
    11. btn.backgroundColor = [UIColor darkGrayColor];
    12. }else{
    13. btn.backgroundColor = [UIColor lightGrayColor];
    14. }
    15. return btn;
    16. }
    17. - (void) btnClick:(UIButton *)btn
    18. {
    19. MyData *data = [dataArray objectAtIndex:btn.tag];
    20. // 改变组的显示状态
    21. if ([data isShow]) {
    22. [data setIsShow:NO];
    23. }else{
    24. [data setIsShow:YES];
    25. }
    26. // 刷新点击的组标题,动画使用卡片
    27. [myTableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationFade];
    28. }
时间: 2024-10-11 01:52:45

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

Bootstrap基础7(标签、徽章、大屏展播、页面标题、缩略图、进度条、面板、折叠效果)

<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <title>标签.徽章.

如何让IOS中的文本实现3D效果

本转载至 http://bbs.aliyun.com/read/181991.html?spm=5176.7114037.1996646101.25.p0So7c&pos=9     zhedianshi 级别: 帮帮团 发帖 487 云币 430 加关注 写私信 只看楼主 更多操作楼主  发表于: 2014-06-10 我想要在IOS中对一些文本进行3D效果渲染,使用了UIKit和标准视图控制器. 实现之的效果大概能成为这样:   能不能通过iOS和UIKit实现?我只用了一个静态PNG图片,

jquery-练习-折叠效果

<!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>bind折叠效果</title> <script type="text/

【转】Jquery折叠效果

转自:http://www.cnblogs.com/clc2008/archive/2011/10/25/2223254.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19

bootstrap实现分栏选择性显示和折叠效果

bootstrap为我们提供了非常丰富的js插件和css样式,如何运用bootstrap来实现分栏选择行显示和折叠效果,如下所示: 1.分栏显示 <!doctype html> <html> <head> <!--导入bootstrap样式--> <link href="bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css"&

css实现漂亮的文字滑动折叠效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

实现类似QQ的折叠效果

//  主要核心是点击自定义header来展开和收起每一组里面的cell,模型里面应该有isShow此属性来记录开展还是收起. //  ViewController.m//  实现类似QQ的折叠效果////  Created by skg_Myfly on 16/3/3.//  Copyright © 2016年 skg_Myfly. All rights reserved.// #import "ViewController.h" #import "QQCellModel.

用HTML+CSS实现--折叠效果

下图是一个Accordion组件,请用HTML+CSS实现其UI,并用面向对象的思路把折叠效果JS实现.如果能用纯css的方式实现其折叠效果更佳.PS/这是小米15年的一道校招笔试题,无意间看到就实现了一下. 这个题让最好用css实现,那就考察的知识点比较多啦!特别是css选择器这一块.具体实现代码如下. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>纯

?关于ios中的点赞控件效果的实现--UIControl

关于ios中的点赞控件效果的实现--UIControl 在开发当中,可能很多时候都需要做个点赞的需求,如果用按钮实现,按钮作为一个系统复合控件,外部是一个 View-->UIControl的容器, 内部包含了UILabel和UIImage,以及一些排版规则.用UIButton就很难去做一些在"赞"和"取消赞"切换时的效果. 可是我们又很需要UIButton似的事件响应机制. 怎么办? 对! 就是使用UIControl. UIControl在这里有两个突出的优势