UITableView 横向滚动(二)

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值