tableView联动

作者: 超_iOS | 来源:发表于2017-08-07 15:18 被阅读63次

    难点就是判断区头将出现和结束出现时左tableview的变化

    image.png
    #import "ViewController.h"
    
    @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
    @property (nonatomic , strong) UITableView *leftTableV;
    @property (nonatomic , strong) UITableView *rightTableV;
    @property (nonatomic , copy) NSArray *leftAry;
    @property (nonatomic , copy) NSArray *rightAry;
    @property (nonatomic , assign) BOOL isToDown;//向下滑
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        _leftAry = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8"];
    
        self.rightAry = @[@[@"123",@"11",@"11111",@"11223344",@"11111",@"11223344",@"12345678",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"],@[@"123",@"11",@"11111",@"11223344",@"12345678"]];
        [self.view addSubview:self.leftTableV];
        [self.view addSubview:self.rightTableV];
        self.isToDown = YES;
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (UITableView *)leftTableV
    {
        if (!_leftTableV) {
            _leftTableV = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, self.view.frame.size.height) style:UITableViewStylePlain];
            _leftTableV.backgroundColor = [UIColor redColor];
            _leftTableV.dataSource = self;
            _leftTableV.delegate = self;
            [_leftTableV registerClass:[UITableViewCell class] forCellReuseIdentifier:@"left"];
        }
        return _leftTableV;
    }
    
    - (UITableView *)rightTableV
    {
        if (!_rightTableV) {
            _rightTableV = [[UITableView alloc] initWithFrame:CGRectMake(100, 0, self.view.frame.size.width - 100, self.view.frame.size.height) style:UITableViewStylePlain];
            _rightTableV.dataSource = self;
            _rightTableV.delegate = self;
            _rightTableV.backgroundColor = [UIColor greenColor];
            [_rightTableV registerClass:[UITableViewCell class] forCellReuseIdentifier:@"right"];
        }
        return _rightTableV;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (tableView == _leftTableV) {
            return 100;
        }
        else
            return 50;
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        if (tableView == _rightTableV) {
            return 30;
        }else
            return 0;
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
    {
        return 0.01;
    }
    - (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        if (_rightTableV == tableView) {
            UILabel * headerLB = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.rightTableV.frame.size.width, 30)];
            headerLB.text = [NSString stringWithFormat:@"第%@区",self.leftAry[section]];
            headerLB.backgroundColor = [UIColor yellowColor];
            return headerLB;
        }
        return nil;
    }
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        if (tableView == _leftTableV) {
            return 1;
        }else
            return self.rightAry.count;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if (tableView == _leftTableV) {
            return self.leftAry.count;
        }else
            return ((NSArray *)self.rightAry[section]).count;
    }
    
    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell * cell;
        if (tableView == _leftTableV) {
             cell = [tableView dequeueReusableCellWithIdentifier:@"left" forIndexPath:indexPath];
            cell.textLabel.text = self.leftAry[indexPath.row];
            cell.textLabel.textColor = [UIColor redColor];
            return cell;
        }else
        {
            cell = [tableView dequeueReusableCellWithIdentifier:@"right" forIndexPath:indexPath];
           
            cell.textLabel.text = [NSString stringWithFormat:@"第%ld区  : %@", indexPath.section , self.rightAry[indexPath.section][indexPath.row]];
          return cell;
        }
        
    }
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (tableView == _leftTableV) {
    //        [self.rightTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.row] animated:YES scrollPosition:UITableViewScrollPositionNone];
           [self.rightTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.row] atScrollPosition:UITableViewScrollPositionTop animated:YES];
            
            [self.leftTableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:0] atScrollPosition:UITableViewScrollPositionTop  animated:YES];
        }
        
    }
    //header将出现在屏幕上
    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
    {
         NSLog(@"开始出现%ld",section);
        if (tableView == _rightTableV && !self.isToDown && (_rightTableV.dragging || _rightTableV.decelerating)) {//向上滑的,用户拖拽
            NSLog(@"向上滑动去去去%ld",section);
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:section inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
        }
        
        
    }
    //区头展示完了
    - (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section
    {
         NSLog(@"结束%ld",section);
        if (tableView == _rightTableV && self.isToDown &&  (_rightTableV.dragging || _rightTableV.decelerating)) {//向下滑的
            NSLog(@"向下去去去%ld",section);
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:section + 1  inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
        }
    }
    //滑动时
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
       static CGFloat OffsetY = 0;
        if ((UITableView *)scrollView == _rightTableV) {
            
          
            self.isToDown = OffsetY < scrollView.contentOffset.y;
          //  NSLog(@"滑动范围%f,向下滑么(下边出现)%d",scrollView.contentOffset.y,self.isToDown) ;
              OffsetY = scrollView.contentOffset.y;
            //scrollView.contentOffset.y < 0
        }
    }
    

    第二种情况(headerView是否滞留),其他地方不变

      _rightTableV = [[UITableView alloc] initWithFrame:CGRectMake(100, 0, self.view.frame.size.width - 100, self.view.frame.size.height) style:UITableViewStyleGrouped];//不滞留
    
    //header将出现在屏幕上
    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
    {
         NSLog(@"开始出现%ld",section);
        if (tableView == _rightTableV && !self.isToDown && (_rightTableV.dragging || _rightTableV.decelerating)) {//向上滑的,用户拖拽
            NSLog(@"向上滑动去去去%ld",section);
            if (section == 0) {
                 [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:section inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
            }else
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:section - 1 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
        }
        
        
    }
    //区头展示完了
    - (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section
    {
         NSLog(@"结束%ld",section);
        if (tableView == _rightTableV && self.isToDown &&  (_rightTableV.dragging || _rightTableV.decelerating)) {//向下滑的
            NSLog(@"向下去去去%ld",section);
            [self.leftTableV selectRowAtIndexPath:[NSIndexPath indexPathForRow:section   inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
        }
    }
    

    相关文章

      网友评论

        本文标题:tableView联动

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