iOS:分组的表格视图UITableView,可以折叠和展开

  虽然表格视图可以分组,但是如果分组后,每一行的内容太多,往后翻看起来比较的麻烦。为了解决这个麻烦,可以将分组的行折叠和展开。折叠时,行内容就会隐藏起来;展开时,行内容就会显示出来。

折叠时:                        展开后:

     

  具体的代码如下:

  1 #import "ViewController.h"
  2
  3 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
  4 @property (weak, nonatomic) IBOutlet UITableView *tableView;
  5 @property (strong,nonatomic)NSArray *provinces;
  6 @property (strong,nonatomic)NSDictionary *cities;
  7 @property (strong,nonatomic)NSMutableArray *Cellstates;
  8 @end
  9
 10 @implementation ViewController
 11
 12 - (void)viewDidLoad {
 13     [super viewDidLoad];
 14     //初始化
 15     self.provinces = [NSArray array];
 16     self.cities = [[NSDictionary alloc]init];
 17     self.Cellstates = [NSMutableArray arrayWithCapacity:self.provinces.count];
 18
 19     //加载数据
 20     NSString *path = [[NSBundle mainBundle]pathForResource:@"cities" ofType:@"plist"];
 21     NSDictionary *dic = [[NSDictionary alloc]initWithContentsOfFile:path];
 22
 23     if(dic)
 24     {
 25         //所有的省份
 26         self.provinces = [dic objectForKey:@"provinces"];
 27
 28         //所有的城市
 29         self.cities = [dic objectForKey:@"cities"];
 30     }
 31
 32     //默认每一个section都是折叠的
 33     for(int i=0; i<self.provinces.count; i++)
 34     {
 35         NSNumber *state = [NSNumber numberWithBool:NO];
 36         [self.Cellstates addObject:state];
 37     }
 38
 39     //设置数据源和代理
 40     self.tableView.dataSource = self;
 41     self.tableView.delegate = self;
 42
 43 }
 44
 45 #pragma mark -tableView的数据源方法
 46 //有多少个分组
 47 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 48 {
 49     return self.provinces.count;
 50 }
 51 //每个分组有多少行
 52 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 53 {
 54     if([self.Cellstates[section] boolValue]) //展开的
 55     {
 56         //取出所有的城市
 57         NSArray *cities = [self.cities objectForKey:self.provinces[section]];
 58         return cities.count;
 59     }
 60     else //折叠的
 61     {
 62         return 0;
 63     }
 64 }
 65 //设置每一个单元格的内容
 66 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 67 {
 68     //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
 69     static NSString *reuseIdentifier = @"citiesCell";
 70     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
 71     //2.如果没有找到,自己创建单元格对象
 72     if(cell == nil)
 73     {
 74         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
 75     }
 76     //3.设置单元格对象的内容
 77     //取出所有的城市
 78     NSArray *cities = [self.cities objectForKey:self.provinces[indexPath.section]];
 79     cell.textLabel.text = cities[indexPath.row];
 80     //设置字体颜色
 81     cell.textLabel.textColor = [UIColor orangeColor];
 82
 83     return cell;
 84 }
 85 //设置头部标题
 86 -(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 87 {
 88     return self.provinces[section];
 89 }
 90 #pragma mark -tableView的代理方法
 91 -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
 92 {
 93     UIButton *button = [[UIButton alloc]init];
 94
 95     //设置标题
 96     [button setTitle:self.provinces[section] forState:UIControlStateNormal];
 97
 98     //设置颜色
 99     [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
100
101     //设置对齐方式
102     button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
103
104     //设置字体大小
105     button.titleLabel.font = [UIFont systemFontOfSize:20];
106
107     //添加事件
108     [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
109
110     //记住button的tag
111     button.tag = section;
112
113     return button;
114 }
115
116 #pragma mark -按钮的事件响应
117 -(void)buttonClicked:(UIButton*)sender
118 {
119     //1.取出旧状态
120     NSNumber *oldState = [self.Cellstates objectAtIndex:sender.tag];
121
122     //2.创建新状态
123     NSNumber *newState = [NSNumber numberWithDouble:![oldState boolValue]];
124
125     //3.删除旧状态
126     [self.Cellstates removeObjectAtIndex:sender.tag];
127
128     //4.添加新状态
129     [self.Cellstates insertObject:newState atIndex:sender.tag];
130
131     //刷新表格
132     [self.tableView reloadData];
133 }
134 @end
时间: 2024-12-12 16:46:14

iOS:分组的表格视图UITableView,可以折叠和展开的相关文章

IOS开发之表视图(UITableView)

IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于数据的展示 我们都会选择表视图,比如通讯录和一些数据列表. 2.我们可以选择创建表视图也可以创建表视图控制器. (二)UITableView基本样式如下(1:UITableViewStylePlain(普通表视图),2:UITableViewStyleGroup(分组表视图)): (三)UITabl

iOS:带主标题、副标题、图像类型的表格视图UITableView

制作一个通讯录,包括姓名.电话.头像,将表格视图类型设置为UITableViewCellStyleSubtitle 效果图: //创建一个联系人的类,初始化数据 在视图控制器中实现表格内容的显示 1 #import "ViewController.h" 2 #import "Contact.h" 3 #define NUM 20 4 5 @interface ViewController ()<UITableViewDataSource,UITableView

表格视图UITableView

(一)UITableView内部自动封装了一套复用机制.会让空闲的cell进入可重用线程池,当有新的cell出现会先去线程池中找有没有可复用的,没有才会创建.假如有100组数据,需要100个cell,但是手机上每屏只能放下10个,其实这时候只需创建11个cell就够用了.每一个数据模型就是一个cell.通过数据源方法来对每个cell进行数据设置.通过代理方法设置关于tableView的头,尾等视图设置. (二)tableView有两种样式:UITableViewStylePlain和UITabl

iOS:UITableView表格视图控件

UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要有:创建表格.设置单元格(行数.内容.行高).编辑单元格(删除单元格.插入单元格).移动单元格.标记单元格.修改单元格等. 一.表格式图的属性和行为: 1.基本属性: @interface UITableView : UIScrollView <NSCoding> @property (nonatomi

Objective-C:UITableView表格视图控件

UITableView:表格视图控件,继承滚动视图控件UIScrollView,(类似于UIPickerView选择器,它主要通过设置数据源代理和行为代理实现协议来设置单元格) 对表格的操作主要有:创建表格.设置单元格(行数.内容.行高).编辑单元格(删除单元格.插入单元格).移动单元格.标记单元格.修改单元格等. 一.表格式图的属性和行为: 1.基本属性: @interface UITableView : UIScrollView <NSCoding> @property (nonatomi

IOS UITableView表格视图详解

IOS 表格视图类UITableView 实现的协议:UITableViewDataSource,UITableViewDelegate 必须实现下面的3个方法: - (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView { return 1; } - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

IOS中表视图(UITableView)使用详解

IOS中UITableView使用总结 一.初始化方法 - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style; 这个方法初始化表视图的frame大小并且设置一个风格,UITableViewStyle是一个枚举,如下: ? 1 2 3 4 typedef  NS_ENUM(NSInteger, UITableViewStyle) {      UITableViewStylePlain,         

IOS第七天(5:UiTableView 汽车品牌,复杂模型分组展示,A-Z索要列表) (2015-08-05 14:03)

复杂模型分组展示 #import "HMViewController.h" #import "HMCarGroup.h" #import "HMCar.h" @interface HMViewController () <UITableViewDataSource> @property (nonatomic, strong) NSArray *carGroups; @property (nonatomic, strong) UITab

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

原文 :  http://blog.csdn.net/youcanping2008/article/details/9202167 一.实现原理:就是在点击表格组头视图的时候,如果该表格视图的组展开了,就把改组的行设置为0,如果该组隐藏了,就显示该组的所有行. 效果如下: 二.实现步骤 1.定义一个数据模型用于封装数据 [cpp] view plaincopy #import <Foundation/Foundation.h> @interface MyData : NSObject { NS