本篇学习笔记将在上一篇学习笔记事例的基础上加上几个常用的数据源方法,分别是在头部和尾部显示文字以及在界面右边加上索引条这三个方法,并使用数据模型来填充数据。
首先创建一个新的类来作为数据模型,头文件代码如下:
#import <Foundation/Foundation.h> @interface Province : NSObject @property (nonatomic,copy) NSString *header; @property (nonatomic,copy) NSString *footer; @property (nonatomic,strong) NSArray *cities; @end
为了方便起见,可以在该类中添加一个静态方法来快速创建一个数据模型头文件方法声明如下:
+ (id) provinceWithHeader:(NSString *)header Footer:(NSString *)footer Cities:(NSArray *)cities;
接下来实现该方法,代码如下:+(id)provinceWithHeader:(NSString *)header Footer:(NSString *)footer Cities:(NSArray *)cities{ Province *province = [[Province alloc]init]; province.header = header; province.footer = footer; province.cities = cities; return province; }
这样就算简单了创建好了一个数据模型类。然后在控制器 -(void) viewDidLoad 方法中初始化数据模型并加入一个数组中,代码如下:
- (void)viewDidLoad { [super viewDidLoad]; UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; tableView.dataSource = self; [self.view addSubview:tableView]; _allProvince = @[ [Province provinceWithHeader:@"江苏" Footer:@"尾部测试" Cities:@[@"苏州",@"南京",@"常州",@"常熟",@"张家港"]], [Province provinceWithHeader:@"湖北" Footer:@"尾部测试" Cities:@[@"武汉"]], [Province provinceWithHeader:@"四川" Footer:@"尾部测试" Cities:@[@"成都",@"绵阳"]], [Province provinceWithHeader:@"湖南" Footer:@"尾部测试" Cities:@[@"郑州",@"洛宁"]], [Province provinceWithHeader:@"广东" Footer:@"尾部测试" Cities:@[@"深圳",@"广州",@"潮汕"]], ]; }
这样数据模型就算完全搞定了。下面列出头部和尾部显示文字以及在界面右边加上索引条这三个方法声明
- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section; - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
只要实现这三个方法,就可以在分组的UITableView控件的上方和下方看到你指定的文字(一般在上方都会显示该分组的组名,在下方一般会显示该分组的概述)以及在控件右侧看到一个纵向的导航条。
下面贴出完整的项目代码:
#import "WYViewController.h" #import "Province.h" @interface WYViewController ()<UITableViewDataSource> { NSArray *_allProvince; } @end @implementation WYViewController - (void)viewDidLoad { [super viewDidLoad]; UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; tableView.dataSource = self; //指定数据源对象为控制器 [self.view addSubview:tableView]; _allProvince = @[ [Province provinceWithHeader:@"江苏" Footer:@"尾部测试" Cities:@[@"苏州",@"南京",@"常州",@"常熟",@"张家港"]], [Province provinceWithHeader:@"湖北" Footer:@"尾部测试" Cities:@[@"武汉"]], [Province provinceWithHeader:@"四川" Footer:@"尾部测试" Cities:@[@"成都",@"绵阳"]], [Province provinceWithHeader:@"湖南" Footer:@"尾部测试" Cities:@[@"郑州",@"洛宁"]], [Province provinceWithHeader:@"广东" Footer:@"尾部测试" Cities:@[@"深圳",@"广州",@"潮汕"]], ]; } - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{ return _allProvince.count; /*返回分组的个数*/ } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ Province *p = _allProvince[section]; return p.cities.count; /*返回每组有几行*/ } - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; Province *p = _allProvince[indexPath.section]; cell.textLabel.text = p.cities[indexPath.row]; return cell; /*为每一组的每一行返回一个UITableViewCell*/ } - (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return [_allProvince[section] header]; /*设置头部文字*/ } - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{ return [_allProvince[section] footer]; /*设置尾部文字*/ } - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ NSMutableArray *array = [NSMutableArray array]; for (Province *p in _allProvince) { [array addObject:p.header]; } return array;/*遍历所有的省份,加入到一个可变数组中,返回*/ } @end
运行结果如下图:
IOS学习笔记——UITableView (二)
最新推荐文章于 2024-06-10 14:18:22 发布