UITableView-01基本使用
UITableView-02模型优化
UITableView-03复杂的Plist解析
UITableView-04常见属性和样式
UITableView-05可重复使用Cell-有限的创建新的cell
UITableView-06可重复使用cell-注册方式
效果图
基础设置
- 遵循数据源协议,设置数据源代理对象,实现代理方法.
@interface ViewController ()<UITableViewDataSource>
self.tableView.dataSource = self;
懒加载
- 读取Plist文件
pathForResource :
- 复杂的字典转模型
- 模型放入数组里面
-(NSArray*)carArrayData{
if (_carArrayData == nil) {
//获取plist文件数据
NSArray *carAll = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cars.plist" ofType:nil]];
//字典转模型
NSMutableArray * carTemp = [NSMutableArray array];
for (NSDictionary* dictTemp in carAll) {
CarGroup * carGroup = [CarGroup carGroupWithDict:dictTemp];
[carTemp addObject:carGroup];
}
self.carArrayData = carTemp;
}
return _carArrayData;
}
//数组里面装的是转换好的Cars模型
@property(nonatomic,strong) NSArray* carsArray;
+(instancetype)carGroupWithDict:(NSDictionary *)dict{
CarGroup* carGroup = [[self alloc]init];
carGroup.title = dict[@"title"];
//1.将plist文件中的cars取出,它是个数组
//2.将数组的每个元素取出,转换为Cars模型
//3.将Cars模型放入可变数组,最后用不可变数组封装
NSMutableArray *carChange = [NSMutableArray array];
for (NSDictionary* carTemp in dict[@"cars"]) {
Cars *car = [Cars carWithDict:carTemp];
[carChange addObject:car];
}
carGroup.carsArray = carChange;
return carGroup;
}
获取对应数据
- 设置总共多少组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return self.carArrayData.count;
}
- 每组分别多少行
//每组多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
CarGroup * groupCar = self.carArrayData[section];
return groupCar.carsArray.count;
}
-
每行显示的内容
- 1.可重复使用cell -- 注册方式,实现可循环使用的cell
- (void)viewDidLoad { [super viewDidLoad]; //注册cell. [self.tableView registerClass:[CarCell class] forCellReuseIdentifier:ID]; }
//每行显示的内容 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; .... return cell; }
- 2.可重复使用cell -- 创建有限的新cell (
initWithStyle
)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if(cell == nil){ //创建新的cell,并且绑定ID cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; // NSLog(@"cell = %@",cell); } ....
dequeueReusableCellWithIdentifier方法讲解
其他的一些方法
-
分组展示数据
- 组头标题的实现
//每组头部文字
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
CarGroup * groupCar = self.carArrayData[section];
return groupCar.title;
}
- 索引条的功能实现
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
// 第一种方法:
// NSMutableArray * titles = [NSMutableArray array];
// for (CarGroup *temp in self.carArrayData) {
// NSString *title = temp.title;
// [titles addObject:title];
// }
// 第二种方法: KVO方式,抽取数组中每个对象的title属性的值,放在一个数组中返回
NSArray<NSString *> *titles = [self.carArrayData valueForKey:@"title"];
return titles;
}
网友评论