难点就是判断区头将出现和结束出现时左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];
}
}
网友评论