iOS.iPad.01.UISplitViewController

1、案例介绍:演示UISplitViewController的基本使用,如图01,02,点击左侧MasterView中的行会改变右侧DetailView中的颜色。

图01图02

2、案例步骤:

2.1、选择Simple View Aplication新建项目,如图03;

图03

2.2、生成项目结构如图04,然后删除CiPad01ViewController.h、CiPad01ViewController.m,打开Main.storyboard,再把自动生成的Ci Pad01 View Controller Scene删除。

图04

2.3、新增以下文件,如图05

图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,删除红框中的导航控制器。

图06

2.6、如图07,将02,04的Custom Class分别改为CiPad01MasterViewController、CiPad01DetailViewController;拖拽两个View Controller到设计界面分别为05、06,背景色分别设置为蓝色、黄色,Custom Class 分别设置为CiPadBlueViewController、CiPadYellowViewController,Size都设置为Detail。

 图07

2.7、如图07,将01的Orientation设置为Landscape(横屏),command + r。

 

posted @ 2014-06-06 03:03  so_tm_what  阅读(820)  评论(0编辑  收藏  举报