iOS 可以纵向横向滑动的报表达成

澳门

背景

screenCut.gif

其一成效是今日集团项目里面遇上的,也是第几次遇见这种需求,所以记录下来,效果如上图。必要重点是能够完成内外的滑动,并且还要最右边的“线路名称”这一列在向左滑动的时候是无法跟随滚动的。那些职能首如若贯彻用户可以一本万利查看关于一下不便看全的列表数据。下边说一下思路。

街道整洁,看不见一丝垃圾踪影

代码大体思路

由地方的GIF图和中坚须要描述大家先是个想到的东西就是文武全才的tableview,没错,这么些效应的完毕当然离不开tableview,那么tableview应该如何表明它的素养呢,左右边的音讯需求对称,所以在那边我使用了多个tableview,也就是最左侧线路名称这一列是一个tableview,左侧的粉肉色字体那一个行是一个tableview。上下滑动两者关系是拔取scrollview完毕的。那接下去就组成代码简单说一下,也便于自身之后回头看,哈哈哈。

游人如鲫,但能平平稳稳地悄然行走,不见喧哗

代码解析

  • 那是亟需的原材料,每一个变量都有注释它的效率了,一眼懂。titleTableView是最左侧的线路名称这一列。infoTableView是粉粉红色字体那一个。contentViewtitleTableView和最上方(除了“线路名称”)这一列内容的superView

@property (nonatomic, strong) UITableView *titleTableView;//标题TableView
@property (nonatomic, strong) UITableView *infoTableView;//内容TableView
@property (nonatomic, strong) UIScrollView *contentView;//内容容器
@property (nonatomic, strong) NSArray *infoArr;//数组

@end

@implementation ViewController {
    CGFloat _kOriginX;
    CGFloat _kScreenWidth;
    CGFloat _kScreenHeight;
}
  • 那是所急需的数目配置,我把内部装有要求的数额都坐落数组李典里面了。我相比懒。哈哈哈哈

- (void)configData {

    _kOriginX = 120;
    _kScreenWidth = self.view.frame.size.width;
    _kScreenHeight = self.view.frame.size.height;
    _infoArr = @[@{@"title":@"出团日期", @"routeName":@"线路名称一", @"time":@"2015/11/21", @"num":@"20", @"price":@"124.0", @"code":@"DAGSDSASA"},
                 @{@"title":@"余位", @"routeName":@"线路名称二", @"time":@"2015/11/21", @"num":@"34", @"price":@"234", @"code":@"TAGDFASFAF"},
                 @{@"title":@"价格", @"routeName":@"线路名称三", @"time":@"2015/11/21", @"num":@"12", @"price":@"634", @"code":@"GHGASDAS"},
                 @{@"title":@"团代号", @"routeName":@"线路名称四", @"time":@"2015/11/56", @"num":@"54", @"price":@"632", @"code":@"DAADSFAD"}];
}
  • 分步来看,首先是底部的,这几个titleLabel是最左上角的“线路名称”那八个字,contentView的布署,下边说了那么些contentView的功力的,从它的frame看出来,_contentView = [[UIScrollView alloc] initWithFrame:CGRectMake(_kOriginX, 0, _kScreenWidth - _kOriginX, _kScreenHeight)];它的x_kOriginX也就是留下的最右边的半空中。最上面的一列使用for循环创立出来的label

//MARK:- 头部视图
- (void)configTableHeader {

    UILabel *titleLabel = [self quickCreateLabelWithLeft:0 width:_kOriginX title:@"线路名称"];
    [self.view addSubview:titleLabel];

    _contentView = [[UIScrollView alloc] initWithFrame:CGRectMake(_kOriginX, 0, _kScreenWidth - _kOriginX, _kScreenHeight)];
    _contentView.delegate = self;
    _contentView.showsVerticalScrollIndicator = NO;
    _contentView.showsHorizontalScrollIndicator = NO;
    _contentView.contentSize = CGSizeMake(400, _kScreenHeight);
    _contentView.bounces = NO;
    [self.view addSubview:_contentView];

    for (int i = 0; i < _infoArr.count; i++) {
        CGFloat x = i * 100;
        UILabel *label = [self quickCreateLabelWithLeft:x width:100 title:[[_infoArr objectAtIndex: i] objectForKey:@"title"]];
        label.textAlignment = NSTextAlignmentCenter;
        [_contentView addSubview:label];
    }
}
  • 这接下去就是安插最右侧那一栏和左边粉黄色字体那么些行。也就那五个tableview创建的。

//MARK:- 详细内容
- (void)configInfoView {
    _titleTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 40, _kOriginX, _kScreenHeight) style:UITableViewStylePlain];
    _titleTableView.dataSource = self;
    _titleTableView.delegate = self;
    _titleTableView.showsVerticalScrollIndicator = NO;
    _titleTableView.showsHorizontalScrollIndicator = NO;
    _titleTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.view addSubview:_titleTableView];

    _infoTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 40, 400, _kScreenHeight) style:UITableViewStylePlain];
    _infoTableView.delegate = self;
    _infoTableView.dataSource = self;
    _infoTableView.showsVerticalScrollIndicator = NO;
    _infoTableView.showsHorizontalScrollIndicator = NO;
    _infoTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [_contentView addSubview:_infoTableView];
}
  • 那是tableview的代办方法完毕。在cellForRowAtIndexPath那么些代理方法中,将七个tableviewcell分手来写。

//MARK:- UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return _infoArr.count;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (tableView == _titleTableView) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"titleTable"];
        if (!cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"titleTable"];
        }
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.text = [[_infoArr objectAtIndex:indexPath.row] objectForKey:@"routeName"];
        cell.textLabel.textColor = [UIColor lightGrayColor];
        cell.textLabel.font = [UIFont systemFontOfSize:14];
        if (indexPath.row%2 == 1) {
            cell.backgroundColor = [UIColor colorWithRed:218/255.0 green:218/255.0 blue:218/255.0 alpha:1];
        } else {
            cell.backgroundColor = [UIColor whiteColor];
        }
        return cell;
    } else {
        NSString *ident = @"InfoCell";
        InfoCell *cell = [tableView dequeueReusableCellWithIdentifier:ident];
        if (!cell) {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"InfoCell" owner:nil options:nil] lastObject];
        }
        if (indexPath.row%2 == 1) {
            cell.backgroundColor = [UIColor colorWithRed:218/255.0 green:218/255.0 blue:218/255.0 alpha:1];
        } else {
            cell.backgroundColor = [UIColor whiteColor];
        }
        [cell setDataWithStr:[_infoArr objectAtIndex:indexPath.row]];
        return cell;
    }
}

//MARK:- UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 40;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"选中了%@", [_infoArr[indexPath.row] objectForKey:@"routeName"]);
}
  • 那么些方法就是促成上下滑动时候,左边和右手tableview联动的落到实处形式。

//MARK:- UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == _titleTableView) {
        [_infoTableView setContentOffset:CGPointMake(_infoTableView.contentOffset.x, _titleTableView.contentOffset.y)];
    }
    if (scrollView == _infoTableView) {
        [_titleTableView setContentOffset:CGPointMake(0, _infoTableView.contentOffset.y)];
    }
}

要是跟随游人前行,必定可以到达你想去的地点

总结

哎呀,写完感觉也是相比不难,就是主导办法的卓殊使用,当时想的时候也是绝非能须臾间想出去,仍然要好基本功不佳的案由呢。把那些效应的兑现记录在那里,也是为着唤起本人,也就是其一效用比较简单,不过再怎么着的效益都是靠最基本的事物堆砌的。思想很关键,不过最根本的仍然去贯彻,光想没有用,人不是靠嘴活的。与君共勉。
额,那一个是本身打着盹写完的,即使你看到此间了,真的是尤其多谢,有点儿困了,巴黎,晚安。

代码地址:https://github.com/irembeu/HorizontalSwipListView.git

它被称作“东方得梅因”

它是风传中的“小葡萄牙共和国”

它私藏了一整座“威墨西温得和克”

它值不值得大家去啊?

恋爱巷

恋爱巷第5至11号大楼具有完整和同一的装点,以红色和浅粉红色为主,有“柔情”的觉得。

恋爱巷两旁的建筑充满了欧陆风情,走在巷里,似是置身北美洲石春小路中。科钦民间轶闻,但凡走过恋爱巷,不久就会遇上恋爱。走在瓦尔帕莱索恋爱巷购物,具有任何的一番色情。

西望洋圣堂

配以花径草丛,古树浓荫,建筑端丽,环境精粹,游人甚众。在那仍可以以一个很好的角度,看到名古屋国旅塔、大桥和海景,是年年拍烟花汇演的一个好去处!

郑家大屋

此处是天下闻明清末文学家郑观应的故居,不须求门票。房子很有味道,院内房宇犬牙交错,庭院曲径通幽。走在屋内,有种穿越的觉得。

龙环葡韵

五幢葡萄牙共和国(República Portuguesa)式住宅为主的博物馆,不要求门票。以分裂布局介绍葡萄牙共和国(República Portuguesa)式住宅,让您询问葡国人的活着起居,由帕罗奥图科学界代表评议为加的夫八景之一,丰盛肯定其方式与知识价值。

威布尔萨人

威罗兹人就像一座制作出来的小城市,购物、赌场、旅社、餐厅应当竟有。

在此间没有白天和黑夜,所有的顶棚都被画上了最美丽的苍穹蓝,娱乐为主很大,在此地呆上一天也逛不完~

巴黎人

雄伟壮丽的法兰西共和国皇城式奢华建筑、考究的法门底蕴、浪漫主义气息…这一个法国首都最引以为傲的精华生动地面世在华雷斯。不管是大白天如故夜晚,都很吻合拍照~

金沙萨法国巴黎人就犹如法国巴黎这么些城市一样,拥有丰盛的多面性,将它们糅合在联合,就恍如走进了法国首都这些可歌可泣的传说…

渔人码头

渔人码头那几个地方大致是宿雾最没有奢华氛围,最平静休闲,闹中取静的一块宝地了~

全套区域都是仿古罗马修建,代表的是一种欧陆怀旧式的闲雅,它不是十足的娱乐场地,更是一个综合性的逍遥宫。此处特色商铺林立,更有兰桂坊式的、欧式的食堂酒楼。稍后还有赌场、酒馆形成,将差别的成分综合于一体,像一座小城市。

其余赌场

累西腓大大小小的娱乐场有那几个,除了上述提及的多少个。葡京、新葡京、英皇、银河……

急需提示的是:赌场是21岁以上才足以进去的哦

看了这么多好玩又幽默的格拉茨地方,告诉大家:太原,当然值得我们去三遍!

和吻途一起向福冈出发,看看他的隆重,看看她的美,体验她的豪情!

**喜欢我的小说就给个小心心,感激每一位给本身小心心的人!
**