在UITableView 横向滚动(一)中实现了简单的横向滑动效果,这里将横向滑动的类简单封装一下:
直接上代码:
1、MyHorizonalTableViewController.h
#import <UIKit/UIKit.h>
@interface MyHorizonalTableViewController : UITableViewController
// 根据子视图初始化
-(instancetype)initWithViews:(NSArray*) views;
// 保存views
@property(retain, nonatomic) NSArray *views;
// 根据子视图控制器初始化
-(instancetype)initWithViewControllers:(NSArray*) controllers;
// 保存viewcontrollers
@property(retain, nonatomic) NSArray *controllers;
@property(assign, nonatomic) BOOL isControllers;
@end
2、MyHorizonalTableViewController.m
#import "MyHorizonalTableViewController.h"
static NSString *myHorizonalTableViewCellReuseIdentifier = @"MyHorizonalTableViewCell";
@interface MyHorizonalTableViewController ()
@end
@implementation MyHorizonalTableViewController
-(instancetype)initWithViews:(NSArray*) views
{
self = [super init];
if (self) {
_views = views;
_isControllers = NO;
}
return self;
}
- (instancetype)initWithViewControllers:(NSArray *)controllers
{
self = [super init];
if (self) {
_controllers = controllers;
_isControllers = YES;
for (UIViewController *controller in controllers) {
[self addChildViewController:controller];
}
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.scrollsToTop = NO;
self.tableView.transform = CGAffineTransformMakeRotation(-M_PI_2);
self.tableView.showsVerticalScrollIndicator = NO;
self.tableView.pagingEnabled = YES;
self.tableView.backgroundColor = [UIColor whiteColor];
self.tableView.bounces = NO;
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier: myHorizonalTableViewCellReuseIdentifier];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITableViewDataSource && UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _isControllers ? _controllers.count : _views.count;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return CGRectGetWidth(tableView.frame);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myHorizonalTableViewCellReuseIdentifier forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.transform = CGAffineTransformMakeRotation(M_PI_2);
UIView *view;
NSInteger row = indexPath.row;
if (_isControllers) {
UIViewController *controller = _controllers[row];
view = controller.view;
} else {
view = _views[row];
}
view.frame = cell.contentView.bounds;
[cell.contentView addSubview: view];
return cell;
}
@end
3、FirstViewController.m
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"FirstViewController";
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
label.backgroundColor = [UIColor whiteColor];
label.textColor = [UIColor blackColor];
label.text = @"FirstViewController";
label.center = self.view.center;
label.textAlignment = NSTextAlignmentCenter;
self.view.backgroundColor = [UIColor orangeColor];
[self.view addSubview:label];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
4、SecondViewController.m
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"SecondViewController";
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
label.backgroundColor = [UIColor whiteColor];
label.textColor = [UIColor blackColor];
label.text = @"SecondViewController";
label.center = self.view.center;
label.textAlignment = NSTextAlignmentCenter;
self.view.backgroundColor = [UIColor yellowColor];
[self.view addSubview:label];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
5、ThirdViewController.m
#import "ThirdViewController.h"
@interface ThirdViewController ()
@end
@implementation ThirdViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"ThirdViewController";
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
label.backgroundColor = [UIColor whiteColor];
label.textColor = [UIColor blackColor];
label.text = @"ThirdViewController";
label.center = self.view.center;
label.textAlignment = NSTextAlignmentCenter;
self.view.backgroundColor = [UIColor blueColor];
[self.view addSubview:label];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
调用:
1、AppDelegate.m中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
MainViewController *viewController = [[MainViewController alloc] init];
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.window makeKeyAndVisible];
return YES;
}
2、MainViewController.h
#import <UIKit/UIKit.h>
#import "MyHorizonalTableViewController.h"
@interface MainViewController : UIViewController
@property(strong, nonatomic) MyHorizonalTableViewController *myViewPager;
@end
3、MainViewController.m
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.title = @"横向滑动的UITableViewController";
FirstViewController *firstViewController = [[FirstViewController alloc] init];
SecondViewController *secondViewController = [[SecondViewController alloc] init];
ThirdViewController *thirdViewController = [[ThirdViewController alloc] init];
// 1、将UIView作为参数调用
/*
NSArray *viewsArray = @[firstViewController.view, secondViewController.view, thirdViewController.view];
_myViewPager = [[MyHorizonalTableViewController alloc] initWithViews: viewsArray];
*/
// 2、将UIViewController作为参数调用
NSArray *viewsArray = @[firstViewController, secondViewController, thirdViewController];
_myViewPager = [[MyHorizonalTableViewController alloc] initWithViewControllers: viewsArray];
_myViewPager.view.frame = self.view.frame;
[self addChildViewController:self.myViewPager];
[self.view addSubview:_myViewPager.view];
self.edgesForExtendedLayout = UIRectEdgeNone;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end