一、案例介紹:演示UISplitViewController的基本使用,如圖01,02,點擊左側MasterView中的行會改變右側DetailView中的顏色。atom
圖01
圖02spa
二、案例步驟:設計
2.一、選擇Simple View Aplication新建項目,如圖03;指針
圖03code
2.二、生成項目結構如圖04,而後刪除CiPad01ViewController.h、CiPad01ViewController.m,打開Main.storyboard,再把自動生成的Ci Pad01 View Controller Scene刪除。blog
圖04事件
2.三、新增如下文件,如圖05
rem
圖05it
2.四、代碼io
#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]; // 一、初始化左側「MasterView」中數據集合 self.listData = [[NSArray alloc] initWithObjects:@"Blue View",@"Yellow View", nil]; // 二、初始化右側「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 { // 一、獲取可重用單元格,若是爲空直接alloc一個 static NSString *cellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // 二、根據行號給單元格加上主標題 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]; // 一、初始化blueViewController、yellowViewController self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"blueViewController"]; self.yellowViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"yellowViewController"]; // 二、默認藍色視圖爲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.五、拖拽Split View Controller到設計界面,如圖06,刪除紅框中的導航控制器。
圖06
2.六、如圖07,將02,04的Custom Class分別改成CiPad01MasterViewController、CiPad01DetailViewController;拖拽兩個View Controller到設計界面分別爲0五、06,背景色分別設置爲藍色、黃色,Custom Class 分別設置爲CiPadBlueViewController、CiPadYellowViewController,Size都設置爲Detail。
圖07
2.七、如圖07,將01的Orientation設置爲Landscape(橫屏),command + r。