iOS 可以縱向橫向滑動的表格實現(xiàn)

背景

screenCut.gif

這個效果是今天公司項目里面遇上的太雨,也是第一次遇見這種需求哪替,所以記錄下來柱彻,效果如上圖拄查。需求主要是可以實現(xiàn)上下的滑動吁津,并且同時最左側(cè)的“線路名稱”這一列在向左滑動的時候是不能跟隨滾動的。這個功能主要是實現(xiàn)用戶可以方便查看關(guān)于一下難以看全的列表數(shù)據(jù)堕扶。下面說一下思路碍脏。

代碼大體思路

由上面的GIF圖和基本需求描述我們第一個想到的東西就是萬能的tableview,沒錯稍算,這個功能的完成當(dāng)然離不開tableview典尾,那么tableview應(yīng)該怎樣發(fā)揮它的功力呢,左右側(cè)的信息需要對稱糊探,所以在這里我使用了兩個tableview钾埂,也就是最左側(cè)線路名稱這一列是一個tableview,右側(cè)的粉紅色字體這些行是一個tableview科平。上下滑動兩者關(guān)聯(lián)是使用scrollview完成的褥紫。那接下來就結(jié)合代碼簡單說一下,也方便我以后回頭看瞪慧,哈哈哈髓考。

代碼解析

  • 這是需要的原材料,每個變量都有注釋它的功能了弃酌,一眼懂氨菇。titleTableView是最左側(cè)的線路名稱這一列儡炼。infoTableView是粉紅色字體這些。contentViewtitleTableView和最上方(除了“線路名稱”)這一列內(nèi)容的superView查蓉。
@property (nonatomic, strong) UITableView *titleTableView;//標(biāo)題TableView
@property (nonatomic, strong) UITableView *infoTableView;//內(nèi)容TableView
@property (nonatomic, strong) UIScrollView *contentView;//內(nèi)容容器
@property (nonatomic, strong) NSArray *infoArr;//數(shù)組

@end

@implementation ViewController {
    CGFloat _kOriginX;
    CGFloat _kScreenWidth;
    CGFloat _kScreenHeight;
}
  • 這是所需要的數(shù)據(jù)配置乌询,我把里面所有需要的數(shù)據(jù)都放在數(shù)組李典里面了誉碴。我比較懶做瞪。哈哈哈哈
- (void)configData {
    
    _kOriginX = 120;
    _kScreenWidth = self.view.frame.size.width;
    _kScreenHeight = self.view.frame.size.height;
    _infoArr = @[@{@"title":@"出團(tuán)日期", @"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":@"團(tuán)代號", @"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也就是預(yù)留的最左側(cè)的空間沮趣。最上面的一列使用for循環(huán)創(chuàng)建出來的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];
    }
}
  • 那接下來就是配置最左側(cè)那一欄和左側(cè)粉紅色字體那些行坷随。也就這兩個tableview創(chuàng)建的房铭。
//MARK:- 詳細(xì)內(nèi)容
- (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的代理方法實現(xiàn)。在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"]);
}
  • 這個方法就是實現(xiàn)上下滑動時候,左側(cè)和右側(cè)tableview聯(lián)動的實現(xiàn)方法类溢。
//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)];
    }
}

總結(jié)

啊凌蔬,寫完感覺也是比較簡單,就是基本方法的配合使用闯冷,當(dāng)時想的時候也是沒有能一下想出來砂心,還是自己基本功不好的原因吧。把這個效果的實現(xiàn)記錄在這里蛇耀,也是為了提醒自己辩诞,也就是這個功能比較簡單,但是再怎樣的功能都是靠最基本的東西堆砌的纺涤。思想很重要译暂,但是最重要的還是去實現(xiàn),光想沒有用撩炊,人不是靠嘴活的外永。與君共勉。
額拧咳,這個是我打著盹寫完的象迎,如果您看到這里了,真的是特別感謝呛踊,有點兒困了砾淌,北京,晚安谭网。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汪厨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子愉择,更是在濱河造成了極大的恐慌劫乱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锥涕,死亡現(xiàn)場離奇詭異衷戈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)层坠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門殖妇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人破花,你說我怎么就攤上這事谦趣。” “怎么了座每?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵前鹅,是天一觀的道長。 經(jīng)常有香客問我峭梳,道長舰绘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任葱椭,我火速辦了婚禮捂寿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挫以。我一直安慰自己者蠕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布掐松。 她就那樣靜靜地躺著踱侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪大磺。 梳的紋絲不亂的頭發(fā)上抡句,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音杠愧,去河邊找鬼待榔。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锐锣。 我是一名探鬼主播腌闯,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雕憔!你這毒婦竟也來了姿骏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤斤彼,失蹤者是張志新(化名)和其女友劉穎分瘦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琉苇,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嘲玫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了并扇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片去团。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拜马,靈堂內(nèi)的尸體忽然破棺而出渗勘,到底是詐尸還是另有隱情,我是刑警寧澤俩莽,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布旺坠,位于F島的核電站,受9級特大地震影響扮超,放射性物質(zhì)發(fā)生泄漏取刃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一出刷、第九天 我趴在偏房一處隱蔽的房頂上張望璧疗。 院中可真熱鬧,春花似錦馁龟、人聲如沸崩侠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽却音。三九已至,卻和暖如春矢炼,著一層夾襖步出監(jiān)牢的瞬間系瓢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工句灌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留夷陋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像骗绕,于是被迫代替她去往敵國和親藐窄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容