1、案例介绍:演示UISplitViewController的基本使用,如图01,02,点击左侧MasterView中的行会改变右侧DetailView中的颜色。
2、案例步骤:
2.1、选择Simple View Aplication新建项目,如图03;
2.2、生成项目结构如图04,然后删除CiPad01ViewController.h、CiPad01ViewController.m,打开Main.storyboard,再把自动生成的Ci Pad01 View Controller Scene删除。
2.3、新增以下文件,如图05
2.4、代码
#import <UIKit/UIKit.h> #import "CiPad01DetailViewController.h" @interface CiPad01MasterViewController : UITableViewController // 左侧“MasterView”中数据集合 @property (nonatomic,strong) NSArray *listData; // 右侧“DetailView”指针,行选中事件需要用 @property (strong,nonatomic) CiPad01DetailViewController *detailViewController; @end
#import "CiPad01MasterViewController.h" @interface CiPad01MasterViewController () @end @implementation CiPad01MasterViewController - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // 1、初始化左侧“MasterView”中数据集合 self.listData = [[NSArray alloc] initWithObjects:@"Blue View",@"Yellow View", nil]; // 2、初始化右侧“DetailView”指针 self.detailViewController = (CiPad01DetailViewController *)[self.splitViewController.viewControllers lastObject]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - Table view data source // UITableViewDataSource协议方法,非必须实现,返回表视图的节数,默认一节 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } // UITableViewDataSource协议方法,必须实现,返回某节的行数 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 2; } // UITableViewDataSource协议方法,必须实现,为表视图单元格提供数据 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 1、获取可重用单元格,如果为空直接alloc一个 static NSString *cellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // 2、根据行号给单元格加上主标题 NSInteger row = [indexPath row]; cell.textLabel.text = [self.listData objectAtIndex:row]; return cell; } #pragma mark - Table view delegate // UITableViewDelegate协议方法,根据选中的行号更新“DetailView” - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger row = [indexPath row]; [self.detailViewController updateDetailView:row]; } @end
#import <UIKit/UIKit.h> #import "CiPad01BlueViewController.h" #import "CiPad01YellowViewController.h" @interface CiPad01DetailViewController : UIViewController // 指向“Main.storyboard”中“Storyboard ID == blueViewController”的控制器 @property (strong,nonatomic) CiPad01BlueViewController *blueViewController; // 指向“Main.storyboard”中“Storyboard ID == yellowViewController”的控制器 @property (strong,nonatomic) CiPad01YellowViewController *yellowViewController; // 根据行号更新DetailView - (void) updateDetailView:(NSInteger)row; @end
#import "CiPad01DetailViewController.h" @interface CiPad01DetailViewController () @end @implementation CiPad01DetailViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // 1、初始化blueViewController、yellowViewController self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"blueViewController"]; self.yellowViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"yellowViewController"]; // 2、默认蓝色视图为DetailView [self.view addSubview:self.blueViewController.view]; } // 根据行号更新DetailView - (void) updateDetailView:(NSInteger)row { if (row == 0) {//蓝色 if (self.yellowViewController.view.superview) {//黄色视图存在则移除 [self.yellowViewController.view removeFromSuperview]; } if (self.blueViewController.view.superview == nil) {//添加蓝色视图存 [self.view addSubview: self.blueViewController.view ]; } } else { if (self.blueViewController.view.superview) {//蓝色视图存在则移除 [self.blueViewController.view removeFromSuperview]; } if (self.yellowViewController.view.superview == nil) {//添加黄色视图存 [self.view addSubview: self.yellowViewController.view ]; } } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
2.5、拖拽Split View Controller到设计界面,如图06,删除红框中的导航控制器。
2.6、如图07,将02,04的Custom Class分别改为CiPad01MasterViewController、CiPad01DetailViewController;拖拽两个View Controller到设计界面分别为05、06,背景色分别设置为蓝色、黄色,Custom Class 分别设置为CiPadBlueViewController、CiPadYellowViewController,Size都设置为Detail。
2.7、如图07,将01的Orientation设置为Landscape(横屏),command + r。