UITableView的简单使用过程
简单介绍
两种样式
UITableViewStylePlain
UITableViewStyleGrouped
数据显示需要设置数据源,数据源是符合遵守协议 <UITableViewDataSource>的类
数据源
dataSource
一些UITableViewDataSource协议里写好的类,这些类有系统自动调用,调用顺序是先设置组再设置行最后设置行内容
设置组section,直接将组返回
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
设置行,直接返回行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
设置行内容,直接返回UITableViewCell对象
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
设置组标题(头部),返回头部标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
设置组描述(尾部),返回尾部描述
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
其中indexPath包含两个数据一个是section一个是row,也就是每一行数据的位置,表示第几组第几行
具体用法看下面的代码
1、创建一个UITableView对象,并设置数据源
1 // 创建一个UITableView2 UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];3 tableView.dataSource = self; // 设置数据源4 [self.view addSubview:tableView]; // 添加到视图
既然数据源是self,那么这个类必须遵守协议:UITableViewDataSource,在这个类扩展上遵守协议即可
1 @interface SLQViewController ()// 遵守协议2 3 @end
2、设置组
将待添加数据到数组中
1 @interface SLQViewController ()// 遵守协议2 {3 NSArray *_property; // 属性4 NSArray *_location; // 位置5 }
在viewDidLoad方法中初始化数组
1 _property = @[@"红",@"蓝",@"黑"];2 _location = @[@"上",@"下",@"左",@"右"];
设置有多少组
1 // 设置组section2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView3 {4 return 2; // 返回组数5 }
3、设置每组多少行
1 // 设置每组多少行 row 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 3 { 4 if(section == 0) 5 return _property.count; 6 if (section == 1) { 7 return _location.count; 8 } 9 10 return 0;11 }
4、设置第section组第row行的数据
1 // 设置行内容 2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 3 { // 创建UITableViewCell对象 4 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 5 if (indexPath.section == 0) 6 { 7 cell.textLabel.text = _property[indexPath.row]; 8 } 9 if (indexPath.section == 1)10 {11 cell.textLabel.text = _location[indexPath.row];12 }13 14 return cell; // 返回15 }
5、设置每组头部显示的文字
1 // 设置每组头部显示文字 2 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 3 { 4 if(section == 0) 5 { 6 return @"颜色"; 7 } 8 if (section == 1) 9 {10 return @"位置";11 }12 return nil;13 }
6、设置每组尾部显示的文字
1 // 设置每组尾部显示文字 2 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section 3 { 4 if(section == 0) 5 { 6 return @"设置一些颜色属性啦啦啦啦"; 7 } 8 if (section == 1) 9 {10 return @"位置属性的设置哈哈哈哈";11 }12 return nil; 13 }
运行可以看到结果:
7、代码优化
上面的代码看着可扩展性太差,下面来几个优化版本,直接看代码吧
1 // 2 // SLQViewController.m 3 // UITableView的练习 4 // 5 // Created by Christian on 15/5/16. 6 // Copyright (c) 2015年 slq. All rights reserved. 7 // 8 9 #import "SLQViewController.h" 10 11 12 // 13 #define kHeader @"header" 14 #define kFooter @"footer" 15 #define kSetting @"setting" 16 17 18 @interface SLQViewController ()// 遵守协议 19 20 { 21 // NSArray *_property; 22 // NSArray *_location; 23 24 // 优化1 25 // NSArray *_allSetting; 26 // NSArray *_noramlSet; 27 // NSArray *_moveSet; 28 29 // 优化2 30 NSArray *_allInfo; // 内部保存字典 31 } 32 @end 33 34 @implementation SLQViewController 35 36 - (void)viewDidLoad 37 { 38 [super viewDidLoad]; 39 // Do any additional setup after loading the view, typically from a nib. 40 // 创建一个UITableView 41 UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; 42 tableView.dataSource = self; // 设置数据源 43 [self.view addSubview:tableView]; // 添加到视图 44 // 45 // _property = @[@"颜色",@"大小",@"透明度"]; 46 // _location = @[@"上",@"下",@"左",@"右"]; 47 // 优化1 48 // _allSetting = @[ 49 // @[@"颜色",@"大小",@"透明度"], 50 // @[@"上",@"下",@"左",@"右"], 51 // ]; 52 // _noramlSet = @[@"设置",@"位置"]; 53 // _moveSet = @[@"常见属性设置啦啦啦啦啦了",@"位移属性设置啊啊啊啊啊啊啊啊"]; 54 // 优化2,保存字典 55 _allInfo = @[ 56 @{ 57 kHeader : @"颜色", 58 kFooter : @"颜色属性啦啦啦啦啦啦啦啦啦", 59 kSetting : @[@"红",@"蓝",@"黑"] 60 }, 61 @{ 62 kHeader : @"位置", 63 kFooter : @"位置属性啊啊啊啊啊啊啊啊", 64 kSetting : @[@"上",@"下",@"左",@"右"] 65 }, 66 @{ 67 kHeader : @"透明属性", 68 kFooter : @"透明属性啊啊啊啊啊啊啊啊", 69 kSetting : @[@"透明",@"半透明",@"不透明"] 70 } 71 ]; 72 73 } 74 // 设置组section 75 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 76 { 77 //return 2; 78 // 优化1 79 //return _allSetting.count; 80 // 优化2 81 return _allInfo.count; 82 } 83 // 设置每组多少行 row 84 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 85 { 86 // if(section == 0) 87 // return _property.count; 88 // if (section == 1) { 89 // return _location.count; 90 // } 91 // 优化1 92 // return [_allSetting[section] count]; 93 // 优化2 94 return [_allInfo[section][kSetting] count]; 95 //return 0; 96 } 97 // 设置行内容 98 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 99 {100 UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];101 // if (indexPath.section == 0)102 // {103 // cell.textLabel.text = _property[indexPath.row];104 // }105 // if (indexPath.section == 1)106 // {107 // cell.textLabel.text = _location[indexPath.row];108 // }109 // 优化1110 //cell.textLabel.text = _allSetting[indexPath.section][indexPath.row];111 // 优化2112 cell.textLabel.text = _allInfo[indexPath.section][kSetting][indexPath.row];113 return cell;114 }115 // 设置每组头部显示文字116 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section117 {118 // if(section == 0)119 // {120 // return @"设置";121 // }122 // if (section == 1)123 // {124 // return @"位置";125 // }126 // 优化1127 // return _noramlSet[section];128 // 优化2129 return _allInfo[section][kHeader];130 }131 // 设置每组尾部显示文字132 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section133 {134 // if(section == 0)135 // {136 // return @"设置一些常见属性";137 // }138 // if (section == 1)139 // {140 // return @"位置属性的设置";141 // }142 // 优化1143 // return _moveSet[section];144 // 优化2145 return _allInfo[section][kFooter];146 }147 @end
源代码:
其实还有优化的空间,继续学习。。。。