BaseViewController.h文件
#import "BaseViewController.h"
@interface TopMenuSelectViewController : BaseViewController
//拖控件的
@property (weak, nonatomic) IBOutlet UIScrollView *menuScrollView;
//拖控件的
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) UIView *menuBgView;
@property (strong, nonatomic) NSArray *menuArray;
@property (strong, nonatomic) NSMutableArray *tableViewArray;
@property (strong, nonatomic) UITableView *refreshTableView;
@property (copy, nonatomic) NSString *menuTittle;
@end
BaseViewController.m文件
#import "TopMenuSelectViewController.h"
#define MENU_BUTTON_WIDTH 80
#define ViewWidth [[UIScreen mainScreen] bounds].size.width
#define ViewHeight [[UIScreen mainScreen] bounds].size.height
@interface TopMenuSelectViewController () <UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate>
@end
@implementation TopMenuSelectViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
self.title = @"顶部标签菜单";
_tableViewArray = [[NSMutableArray alloc]init];
[self createMenu];
[self refreshTableView:0];
}
- (void)createMenu {
_menuArray = @[@"标签一",@"标签二",@"标签三",@"标签四",@"标签五",@"标签六",@"标签七",@"标签八",@"标签九",@"标签十"];
for (int i = 0; i < _menuArray.count; i ++) {
UIButton *menu = [UIButton buttonWithType:UIButtonTypeCustom];
[menu setFrame:CGRectMake(MENU_BUTTON_WIDTH * i, 0, MENU_BUTTON_WIDTH, _menuScrollView.frame.size.height)];
[menu setTitle:_menuArray[i] forState:UIControlStateNormal];
[menu setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];
menu.titleLabel.font = [UIFont systemFontOfSize:14.0];
menu.tag = i;
[menu addTarget:self action:@selector(selectMenu:) forControlEvents:UIControlEventTouchUpInside];
[_menuScrollView addSubview:menu];
}
[_menuScrollView setContentSize:CGSizeMake(MENU_BUTTON_WIDTH * _menuArray.count, _menuScrollView.frame.size.height)];
_menuBgView = [[UIView alloc]initWithFrame:CGRectMake(0, _menuScrollView.frame.size.height - 2, MENU_BUTTON_WIDTH, 2)];
[_menuBgView setBackgroundColor:[UIColor redColor]];
[_menuScrollView addSubview:_menuBgView];
_scrollView.contentSize = CGSizeMake(ViewWidth * _menuArray.count, _scrollView.frame.size.height);
[self addTableViewToScrollView:_scrollView count:_menuArray.count frame:CGRectZero];
}
- (void)selectMenu:(UIButton *)sender {
[_scrollView setContentOffset:CGPointMake(ViewWidth * sender.tag, 0) animated:YES];
float xx = ViewWidth * (sender.tag - 1) * (MENU_BUTTON_WIDTH / ViewWidth) - MENU_BUTTON_WIDTH;
[_menuScrollView scrollRectToVisible:CGRectMake(xx, 0, ViewWidth, _menuScrollView.frame.size.height) animated:YES];
[self refreshTableView:(int)sender.tag];
}
- (void)addTableViewToScrollView:(UIScrollView *)scrollView count:(NSUInteger)pageCount frame:(CGRect)frame {
for (int i = 0; i < pageCount; i++) {
UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(ViewWidth * i, 0 , ViewWidth, ViewHeight - _menuScrollView.frame.size.height - 64)];
tableView.delegate = self;
tableView.dataSource = self;
tableView.tag = i;
[_tableViewArray addObject:tableView];
[scrollView addSubview:tableView];
}
}
- (void)refreshTableView:(int)index {
_refreshTableView = _tableViewArray[index];
CGRect frame = _refreshTableView.frame;
frame.origin.x = ViewWidth * index;
[_refreshTableView setFrame:frame];
_menuTittle = _menuArray[index];
self.title = _menuTittle;
[_refreshTableView reloadData];
}
//滚动视图时让控制器滑块跟随的调用方法
- (void)changeView:(float)x {
float xx = x * (MENU_BUTTON_WIDTH / ViewWidth);
[_menuBgView setFrame:CGRectMake(xx, _menuBgView.frame.origin.y, _menuBgView.frame.size.width, _menuBgView.frame.size.height)];
}
#pragma mark - UITableViewDataSource和UITableViewDelegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.textLabel.text = [NSString stringWithFormat:@"%@ %ld",_menuTittle,(long)indexPath.row];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//只要滚动了就会触发
// isKindOfClass 检测一个对象是否是某个类的成员,isKindOfClass不但可以用来确定一个对象是否是一个类的成员,也可以用来确定一个对象是否是派生自该类的类的成员
if ([scrollView isKindOfClass:[UITableView class]]) {
}
else
{
[self changeView:scrollView.contentOffset.x];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//减速停止了时执行,手触摸时执行执行
// isKindOfClass 检测一个对象是否是某个类的成员,isKindOfClass不但可以用来确定一个对象是否是一个类的成员,也可以用来确定一个对象是否是派生自该类的类的成员
if ([scrollView isKindOfClass:[UITableView class]]) {
}
else
{
float xx = scrollView.contentOffset.x * (MENU_BUTTON_WIDTH / ViewWidth) - MENU_BUTTON_WIDTH;
[_menuScrollView scrollRectToVisible:CGRectMake(xx, 0, ViewWidth, _menuScrollView.frame.size.height) animated:YES];
int i = (scrollView.contentOffset.x / ViewWidth);
[self refreshTableView:i];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end