06.TableView的联动

一、简单介绍

   在同一个界面有两个或者三个TableView,点击前一个TableView后一个TableView的内容相对应的发生改变.

    TableView的联动的原理是,点击第一个TableView,改变第二个TableView的数据源,刷新第二个TableView,其中容易迷糊的就是,数据源的转换,难点就是判断

     我自己写了两个工程实例,一个是省市区的三重联动,一个是中关村在线APP的其中一个页面,是二重联动

     这里我主要是介绍中关村在线的联动界面的做法,省市区的我原先写过博客介绍,前点击这里.

二、中关村在线的联动界面

    中关村在线的联动界面(以下简称为:联动界面) 主要难的地方在解数据,其实联动的思想不难,建议先看省市区,不然可能会被里面的数据绕晕.里面有两段关键代码,我一一介绍

    下面这一段代码是难点.这段代码是写在TableView的点击方法里,当点击了左边的TableView的内容时候就会请求对应的数据.数据主体有两部分组成,两个字典一个是热卖的,另一个就是按照0-9 A-Z 的数据,但是数据本身不是数组,而是字典,所以我们需要对这些数据排序,这样就麻烦了.这就让问题的难度呈指数增长了.我没有使用传统的冒泡排序什么的排序方法排序,我是在一个数组中将0-9 A-Z放在里面,然后对这个数组遍历,然后一数组中的元素,也就是0-9A-Z中的一个,为key值去请求的数据的字典中获得value,如果有值就保存到数组中,没有就当前的元素()也删除掉

        // 请求数据,获得当前主视图多所对应的副视图的数据
        
        [NetWorkingTool netWorkingWithStrURL:strURL block:^(id result) {
            self.rankArr = result[@"rank"];
            self.abcDic = result[@"abc"];
            self.deputyArr = [NSMutableArray array];
            self.sectionCountArr = [NSMutableArray array];
            // 添加元素
            [self.deputyArr addObjectsFromArray:self.rankArr];
            // 添加当前区里的行数
            [self.sectionCountArr addObject:[NSString stringWithFormat:@"%ld",self.rankArr.count]];
            
            // 分区的标题数组
            self.sectionTitleArr = [NSMutableArray arrayWithObjects:@"热",@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];

            // 遍历所有的数据
            for(NSInteger i = 1; i < self.sectionTitleArr.count; i++){
               
                // 将当前字典中的数据添加到数组中,同时让所有的数据,有序的排列
                NSArray *tempArr = [self.abcDic objectForKey:self.sectionTitleArr[i]];
            
                if(tempArr.count == 0){
                    // 将没有数据的分区移除
                    [self.sectionTitleArr removeObjectAtIndex:i];
                    i -= 1;
                }
                else{
                    // 将有数据的分区添加到副视图保存数据的数组中
                    [self.deputyArr addObjectsFromArray:tempArr];
                    // 保存当前分区的数据的个数
                    [self.sectionCountArr addObject:[NSString stringWithFormat:@"%ld",tempArr.count]];
                }
            }
            //
            [self.deputyTableView removeFromSuperview];
            [self createDeputyTableView];
            self.mainTableView.frame = CGRectMake(0, 64, Width / 3, Height - 64);
            [self.deputyTableView reloadData];
        }];


下面这一段代码是另一个难点,这段代码是写在TableViewCell的创建的协议方法里是为了获得当前的分区中的当前的Cell的内容,因为TableView是按照分区显示的但是数组中的数据不是按照分区存储的,所以需要获得当前的TableView的Cell所对应的数据在数组中的位置,下面这一段代码就完成了这项工作

     // 找到当前的Cell在副视图数组中的位置
        NSInteger index = 0;
        for(NSInteger i = 0; i < indexPath.section ; i++){
            index += [self.sectionCountArr[i] integerValue];
        }
        index += indexPath.row;

三、效果图
省市区

 


联动界面


四、工程地址

    省市区地址

    中关村在线联动页面



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值