美文网首页
day09-UITableView-07索引条(综合小案例)

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

作者: js_huh | 来源:发表于2019-10-28 09:30 被阅读0次

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


    UITableViewController-01简单使用


    效果图

    基础设置

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

    获取对应数据

    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. 分组展示数据


    2. 组头标题的实现
    //每组头部文字
    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
        CarGroup * groupCar = self.carArrayData[section];
        return groupCar.title;
    }
    
    1. 索引条的功能实现
    - (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;
    }
    
    

    相关文章

      网友评论

          本文标题:day09-UITableView-07索引条(综合小案例)

          本文链接:https://www.haomeiwen.com/subject/vlssvctx.html