zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    Linux -- 查看是否安装了指定的包
    linux -- 部署java服务器(1) linux安装jdk
    spring boot -- 接收文件接口
    vue3 --相对于vue2的改变T1档次
    243交换输出
    24416进制的简单运算
    7街区最短路径问题
    206矩形的个数
    33蛇形填数
    273字母小游戏
  • 原文地址:https://www.cnblogs.com/cqchen/p/3771569.html
Copyright © 2011-2022 走看看