您的位置:首页 > 产品设计 > UI/UE

UITableView 横向滚动(二)

2015-06-03 15:25 330 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: