收藏ios

tableView联动

2017-08-07  本文已影响63人  超_iOS

难点就是判断区头将出现和结束出现时左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];
    }
}
上一篇下一篇

猜你喜欢

热点阅读