1. 程式人生 > >UITableView 橫向滾動(二)

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