day09-UITableView-07索引条(综合小案例)

UITableView-01基本使用
UITableView-02模型优化
UITableView-03复杂的Plist解析
UITableView-04常见属性和样式
UITableView-05可重复使用Cell-有限的创建新的cell
UITableView-06可重复使用cell-注册方式


UITableViewController-01简单使用


day09-UITableView-07索引条(综合小案例)_第1张图片
效果图

基础设置

  1. 遵循数据源协议,设置数据源代理对象,实现代理方法.
    @interface ViewController ()
    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;
}

获取对应数据

  1. 设置总共多少组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return self.carArrayData.count;
}
  1. 每组分别多少行
//每组多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    CarGroup * groupCar = self.carArrayData[section];
    return groupCar.carsArray.count;
}
  1. 每行显示的内容

    • 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方法讲解


其他的一些方法

  1. 分组展示数据


    day09-UITableView-07索引条(综合小案例)_第2张图片
  2. 组头标题的实现
//每组头部文字
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    CarGroup * groupCar = self.carArrayData[section];
    return groupCar.title;
}
  1. 索引条的功能实现
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
//    第一种方法:
//    NSMutableArray * titles = [NSMutableArray array];
//    for (CarGroup *temp  in self.carArrayData) {
//        NSString *title = temp.title;
//        [titles addObject:title];
//    }
    
    // 第二种方法: KVO方式,抽取数组中每个对象的title属性的值,放在一个数组中返回
    NSArray *titles = [self.carArrayData valueForKey:@"title"];
    return titles;
}

你可能感兴趣的:(day09-UITableView-07索引条(综合小案例))