其实不光只是股票类,其他很多应用上应该也会遇到,比如商城类的参数对比,有时候会有一些列表一行上会有很多的参数,当前屏幕显示不全,就需要左右滑动,但是又能上下滑动,然而左侧的的标题栏却需要固定不动,顶部的标题栏却需要跟着左右滑动而联动。
1.实现这个动能其实并不难,只要认真分析下其功能逻辑,首先,左侧标题列表要左右滑动时候保持不动,但是可以上下滑动,那么这个可以做一个列表,右侧的列表可以上下滑动,又可以左右滑动,那么也做成一个列表,至于左右滑动,直接放置一个scrollerView即可,把这个列表放上去,然后再滑动方法里边联动一下左侧列表,左侧也联动一下右侧,这样这两个列表就相当于一个了,然后右侧的列表又可以左右滑动,功能基本就实现了,然后就是上边的左右联动的标题栏,我看有的又做了一个scroller,其实不用,直接做成区头即可,下面上代码。
2.很简单,创建一左一右两个列表,加一个scrollerView
3.然后就是代理方法了,两个高度什么的都一样,需要注意的是区头区分一下即可
4.滑动视图的代理方法,核心地方就在这里,有木有很简单
下面粘贴下全部代码,方便大家使用,当然这个是比较简单的那种联动,如果需要做右侧列表是不固定能添加的那种的话底层思路是一样的,只不过改成每次创建一个列表罢了,如有问题欢迎咨询。
#import "QmySelectViewController.h"
#import "MySelectLeftTableViewCell.h"
#import "MySelectRightTableViewCell.h"
@interface QmySelectViewController ()
/**自选左侧列表*/
@property(nonatomic,strong)UITableView*mySelectLeftTable;
/**底部参数滑动视图*/
@property(nonatomic,strong)UIScrollView*bootomScroller;
/**自选右侧列表*/
@property(nonatomic,strong)UITableView*mySelectRightTable;
@end
static NSString*MySelectLeftCellString=@"MySelectLeftCellString";
static NSString*MySelectRightCellString=@"MySelectRightCellString";
@implementation QmySelectViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//调取视图
[self myselectLeftView];
[self bootomScrollerView];
}
#pragma mark - 自选列表
-(void)bootomScrollerView
{
self.bootomScroller=[[UIScrollView alloc]initWithFrame:CGRectMake(120, 15, MAINSCREEN_WIDTH-120, MAINSCREEN_HEIGHT-128)];
self.bootomScroller.delegate=self;
self.bootomScroller.contentSize=CGSizeMake(720, 35);
self.bootomScroller.backgroundColor=[UIColor redColor];
self.bootomScroller.showsHorizontalScrollIndicator=NO;
[self.view addSubview:self.bootomScroller];
//调取子视图列表
[self myselectRightView];
}
-(void)myselectLeftView
{
self.mySelectLeftTable=[[UITableView alloc]initWithFrame:CGRectMake(0, 15, 120, MAINSCREEN_HEIGHT-128) style:UITableViewStylePlain];
self.mySelectLeftTable.bounces=NO;
self.mySelectLeftTable.delegate=self;
self.mySelectLeftTable.dataSource=self;
self.mySelectLeftTable.showsVerticalScrollIndicator=NO;
self.mySelectLeftTable.separatorInset=UIEdgeInsetsMake(0, 0, 0, 0);
[self.view addSubview:self.mySelectLeftTable];
[self.mySelectLeftTable registerClass:[MySelectLeftTableViewCell class] forCellReuseIdentifier:MySelectLeftCellString];
}
-(void)myselectRightView
{
self.mySelectRightTable=[[UITableView alloc]initWithFrame:CGRectMake(0, 0,720, MAINSCREEN_HEIGHT-128) style:UITableViewStylePlain];
self.mySelectRightTable.bounces=NO;
self.mySelectRightTable.delegate=self;
self.mySelectRightTable.dataSource=self;
self.mySelectRightTable.showsVerticalScrollIndicator=NO;
self.mySelectRightTable.separatorInset=UIEdgeInsetsMake(0, -25, 0, -25);
[self.bootomScroller addSubview:self.mySelectRightTable];
[self.mySelectRightTable registerClass:[MySelectRightTableViewCell class] forCellReuseIdentifier:MySelectRightCellString];
}
#pragma mark - 代理方法
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView==_mySelectLeftTable) {
MySelectLeftTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:MySelectLeftCellString forIndexPath:indexPath];
return cell;
}
else
{
MySelectRightTableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:MySelectRightCellString forIndexPath:indexPath];
return cell;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 40;
}
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (tableView==_mySelectLeftTable) {
UIView*view=[UIView new];
view.backgroundColor=[UIColor whiteColor];
UIView*line=[[UIView alloc]initWithFrame:CGRectMake(0, 39.5, tableView.bounds.size.width, 0.5)];
line.backgroundColor=AXGColor(193, 193, 193);
[view addSubview:line];
return view;
}
else
{
UIView*view=[[UIView alloc]init];
view.backgroundColor=[UIColor whiteColor];
UIView*line=[[UIView alloc]initWithFrame:CGRectMake(0, 39.5, tableView.bounds.size.width, 0.5)];
line.backgroundColor=AXGColor(193, 193, 193);
[view addSubview:line];
for (int i=0; i<12; i++) {
UILabel*lable=[[UILabel alloc]initWithFrame:CGRectMake(i*60, 0, 60, 40)];
lable.text=@"最新";
lable.font=[UIFont systemFontOfSize:14];
[view addSubview:lable];
}
return view;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 40;
}
#pragma mark - 滑动代理方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//互相联动
if (scrollView==self.mySelectRightTable) {
self.mySelectLeftTable.contentOffset=self.mySelectRightTable.contentOffset;
}
if (scrollView==self.mySelectLeftTable) {
self.mySelectRightTable.contentOffset=self.mySelectLeftTable.contentOffset;
}
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
//在滑动右侧列表时候或者是横向滑动时候关闭掉左侧列表的滑动属性,防止一边滑动右侧一边滑动左侧bug
if (scrollView==self.bootomScroller||scrollView==self.mySelectRightTable) {
self.mySelectLeftTable.scrollEnabled=NO;
}
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
//这个方法是一旦开始滑动,直到我手指离开屏幕才会调用,在这里让左侧列表可滑动,否则如果停止滑动但手指并没有离开屏幕就会出问题
if (scrollView==self.bootomScroller||scrollView==self.mySelectRightTable) {
self.mySelectLeftTable.scrollEnabled=YES;
}
}