UISplitViewController使用
shouldHideViewController:(UIViewController *)master inOrientation:(UIInterfaceOrientation)orientation
{
return YES; // always hide it
}
{
return UIInterfaceOrientationIsPortrait(orientation); //竖屏时隐藏master
}
{
//将要隐藏master时,在detail控制器的toolbar上设置并显示一个按钮
barButtonItem.title = @“Master”;
[detailViewController setSplitViewBarButtonItem:barButtonItem];
}
{
// removeSplitViewBarButtonItem: must remove the bar button from its toolbar
[detailViewController removeSplitViewBarButtonItem:nil];
}
<4>在iPad上的基本样式截图为:

<5>在故事板布局的样式截图为:

下面我们就通过纯代码的方式创建如下:
1、创建两个控制器类,一个为主控制器类MasterViewController,一个为详细控制器类DetailViewController


2、导入几张素材图片,用来在详细控制器中显示。所有的文件截图为:

3、下面就是具体的代码创建了:
//在AppDelegate.m文件中:
导入头文件并声明必要的属性,同时实现分割控制器的协议
#import "AppDelegate.h"
#import "MasterViewController.h"
#import "DetailViewController.h"
@interface AppDelegate ()<UISplitViewControllerDelegate>
@property (strong,nonatomic)UISplitViewController *splitViewController; //声明分割控制器
@end
创建分割控制器、主控制器、详细控制器,并设置它们之间的关系,以及设置分割控制器的代理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建分割控制器
self.splitViewController = [[UISplitViewController alloc]init];
//创建MasterVC
MasterViewController *MasterVC = [[MasterViewController alloc]init];
//创建DetailVC
DetailViewController *DetailVC = [[DetailViewController alloc]init];
//创建左侧导航控制器
UINavigationController *MasterNavigationController = [[UINavigationController alloc]initWithRootViewController:MasterVC];
//创建右侧导航栏控制器
UINavigationController *DetailNavigationController = [[UINavigationController alloc]initWithRootViewController:DetailVC];
// 设置 UISplitViewController 所管理的左、右两个 UIViewController
self.splitViewController.viewControllers = @[MasterNavigationController,DetailNavigationController];
//设置分割控制器分割模式
self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
//设置代理
self.splitViewController.delegate = self;
//设置window的根控制器
self.window.rootViewController = self.splitViewController;
return YES;
}
实现分割控制器协议的方法
#pragma mark -<UISplitViewController>
//主控制器将要隐藏时触发的方法
-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = @"Master";
//master将要隐藏时,给detail设置一个返回按钮
UINavigationController *Nav = [self.splitViewController.viewControllers lastObject];
DetailViewController *Detail = (DetailViewController *)[Nav topViewController]; Detail.navigationItem.leftBarButtonItem = barButtonItem;
} //开始时取消二级控制器,只显示详细控制器
- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController
{
return YES;
} //主控制器将要显示时触发的方法
-(void)splitViewController:(UISplitViewController *)sender willShowViewController:(UIViewController *)master invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
//master将要显示时,取消detail的返回按钮
UINavigationController *Nav = [self.splitViewController.viewControllers lastObject];
DetailViewController *Detail = (DetailViewController *)[Nav topViewController]; Detail.navigationItem.leftBarButtonItem = nil;
}


//在MasterViewcontroller.m文件中:
导入头文件并声明必要的属性,同时实现分割控制器的协议
#import "MasterViewController.h"
#import "DetailViewController.h" @interface MasterViewController ()<UITableViewDataSource,UITableViewDelegate>
@property(strong,nonatomic)UITableView *tableView; //表格视图
@property (strong,nonatomic)NSMutableArray *dataObjects; //文字数据
@property (strong,nonatomic)NSMutableArray *imageArrayM; //图像数据
@end
创建主控制器Master的导航栏和按钮,并设置表格视图的数据源和代理
- (void)viewDidLoad {
[super viewDidLoad];
//创建UITableView
self.tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
//创建数组
self.dataObjects = [NSMutableArray arrayWithObjects:@"美女0",@"美女1",@"美女2",nil];
self.imageArrayM = [NSMutableArray arrayWithObjects:[UIImage imageNamed:@"美女0.jpg"],[UIImage imageNamed:@"美女1.jpg"],[UIImage imageNamed:@"美女2.jpg"],nil];
//设置数据源和代理
self.tableView.dataSource = self;
self.tableView.delegate = self;
[self.view addSubview:self.tableView];
//设置主控制器Master的导航栏和按钮
self.navigationItem.title = @"Master";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:nil];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:nil];
}
实现表格视图的数据源协议方法
#pragma mark -<UITableViewDataSource>
//多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.dataObjects.count;
}
//设置每一个单元格的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
static NSString *reuseIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
//2.如果没有找到,自己创建单元格对象
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
//3.设置单元格对象的内容
cell.textLabel.text = [self.dataObjects objectAtIndex:indexPath.row];
return cell;
}


实现表格视图的代理协议方法
#pragma mark -<UITableViewDelegate>
//选中单元格时,设置详细控制器中的内容
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//获取详细控制器
UINavigationController *detailNAV = [self.splitViewController.viewControllers lastObject];
DetailViewController *detatilVC = (DetailViewController*)[detailNAV topViewController]; //创建图像视图
UIImageView *imageView = [[UIImageView alloc]initWithFrame:detatilVC.view.frame];
[imageView setImage:[self.imageArrayM objectAtIndex:indexPath.row]]; [detatilVC.view addSubview:imageView];
}
//在DEtailViewController.m文件中
设置视图背景颜色
- (void)viewDidLoad {
[super viewDidLoad];
//设置视图颜色为白色
[self.view setBackgroundColor:[UIColor whiteColor]];
}
演示结果如下:
开始时:

点击Master,显示Master主控制器:

点击单元格时,Detail详细控制器显示的内容:

点击屏幕,关闭Master主控制器:

UISplitViewController使用的更多相关文章
- UISplitViewController - iPad分屏视图控制器
UISplitViewController - 分屏视图控制器 概述 UISplitViewController 是一个容器vc, 展示一个 master-detail(主-详(从))界面. 主视图改 ...
- iOS - UISplitViewController
前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UISplitViewController : UIViewController @available(iOS 3. ...
- iOS:分割控制器UISplitViewcontroller
分割控制器UISplitViewController <1>功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个:左边的为主控制器,右边的为详细控制器,主控 ...
- iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)
iPad和iPhone开发的异同 1.iPhone和iPad: niPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \ ...
- 分割视图控制器(UISplitViewController) 改_masterColumnWidth 导致在 IOS 10中出现闪退
默认UISplitViewController的Master和Detail的宽度是固定的,可以通过下面的方式来改变 [splitViewController setValue:[NSNumber nu ...
- 分割视图控制器(UISplitViewController)
这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...
- UISplitViewController
前言 大多数时候,iPhone.iPod 应用与 iPad 应用开发没有太大的区别,但是 iPad 的屏幕比 iPhone 大, 设计程序时可以充分利用 iPad 的大屏幕特点,例如 TabBar 和 ...
- ios之UISplitViewController
iPad的屏幕比iPhone大,所以在界面上,iPad比iPhone多一个UISplitViewController,用来实现iPad在横屏时,分两栏显示所需要的界面,可以一边是目录一边是具体的内容. ...
- iOS Programming UISplitViewController
iOS Programming UISplitViewController The iPad, on the other hand, has plenty of screen space to pr ...
随机推荐
- ionic3 安卓硬件返回
platform.ready().then(() => { this.platform.registerBackButtonAction(() => { let activePortal ...
- python3 字典(dictionary)(一)
一.定义:是另一种可变容器模型,可存储任意类型对象:(也被称为关联数组或哈希表:存储的数据是没有顺序的) 语法为: d = {key1 : value1, key2 : value2 } #----- ...
- python第10天(下)
https://www.cnblogs.com/zingp/p/6863170.html 一:IO模型介绍 IO发生时涉及的对象和步骤 对于一个网络IO(network IO),它会涉及到两个系统对 ...
- beta冲刺5/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(5/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作中 数据集标注 接下来的计划 制作p ...
- SQL反模式学习笔记12 存储图片或其他多媒体大文件
目标:存储图片或其他多媒体大文件 反模式:图片存储在数据库外的文件系统中,数据库表中存储文件的对应的路径和名称. 缺点: 1.文件不支持Delete操作.使用SQL语句删除一条记录时,对应的文 ...
- Python学习(三十七)—— 模板语言之自定义filter和中间件
一.模板语言之自定义filter 自定义filter文件存放位置 模板中自定义函数 - 在已注册的app中创建一个名字叫 templatetags 文件夹 - 任意创建一个py文件 - 创建名字交 r ...
- JMeter性能测试中控制业务比例
性能测试混合场景中,我们需要组合多个业务操作到场景中来.比如有一个论坛的业务分布如下:发布新帖与回复帖子的比例为2:3,那么我们在JMeter测试计划中如何控制其比例呢? 可以通过以下两种方式解决:多 ...
- WPF:解决数据绑定时不更新数据的问题
当用户在窗体控件中修改数据时,如果此时用户点击其它窗体会出现数据没有更新的情况. 这是由于数据绑定默认是通过失去焦点来提交数据的.可通过属性变更方法来更新数据: <TextBox.Text> ...
- 浅析uWSGI、uwsgi、wsgi
WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...
- STS的安装以及IDEA安装和破解过程
一.STS的下载 1·下载地址:直接百度搜索STS,选择Download STS 3 2.选择电脑对应的版本 直接下载 3.安装包解压后在有jdk的情况下就可以直接使用 二.IDEA的安装 下载网址: ...