iOS:分割控制器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主控制器:
iOS:分割控制器UISplitViewcontroller的更多相关文章
- Swift之分割视图控制器-UISplitViewController
Swift之分割视图控制器-UISplitViewController UISplitViewController这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左 ...
- iOS 视图控制器转场详解
iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...
- iOS视图控制器的生命周期
今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...
- 关于ios导航控制器的知识总结
关于ios导航控制器的知识总结 添加了导航控制器后: 1.一个导航控制器会有一个顶部导航栏navigationbar和一个底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏 ...
- iOS中控制器的释放问题
iOS中控制器的释放问题 ARC工程是可以重写dealloc方法并被系统调用的,但不需要手动调用父类的dealloc,手写[super dealloc]方法会报错,事实上系统会自动帮你调用父类的dea ...
- iOS 容器控制器 (Container View Controller)
iOS 容器控制器 (Container View Controller) 一个控制器包含其他一个或多个控制器,前者为容器控制器 (Container View Controller),后者为子控制器 ...
- 分割视图控制器(UISplitViewController) 改_masterColumnWidth 导致在 IOS 10中出现闪退
默认UISplitViewController的Master和Detail的宽度是固定的,可以通过下面的方式来改变 [splitViewController setValue:[NSNumber nu ...
- 分割视图控制器(UISplitViewController)
这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...
- 学习笔记:iOS 视图控制器(UIViewController)剖析
转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531136.html 视图控制器在iOS编程中占据非常重要的位置,因此我们一定要掌握 ...
随机推荐
- week 9 scenario testing
1:How do you expect different personas to use your software? What’s their need and their goals, ho ...
- LNMP系列网站零基础开发记录(三)
[目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...
- TF-IDF与余弦相似性的应用(三):自动摘要
有时候,很简单的数学方法,就可以完成很复杂的任务. 这个系列的前两部分就是很好的例子.仅仅依靠统计词频,就能找出关键词和相似文章.虽然它们算不上效果最好的方法,但肯定是最简便易行的方法. 今天,依然继 ...
- 使用 NIO.2 遍历目录下所有的Java文件
package wellGrounded; import java.io.IOException; import java.nio.file.FileVisitResult; import java. ...
- htaccess 探秘
.htaccess访问控制(Allow/Deny) 1. 验证是否支持.htaccess 在目录下新建一个.htaccess 文件,随笔输入一串字符(毫无意义),看看什么反应,如果是500错误,说明目 ...
- MyEclipse2015 编写js报 'Calculating completion proposals..' has encountered a problem.
前言:编写js(按点后)弹出这个鬼东西,百度不到..估计是破解有问题.只有换版本了. 版本:MyEclipse 2015 stable 1.0 详细错误信息 解决:换成2.0版本
- 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 【BZOJ】【3007】拯救小云公主
思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...
- razor GPU
抓之前要把设置里面 Setting -Debug Setting -Graphic -PA DEBUG yes -RAZOR GPU yes replay是个很有用的功能,要设置 -Debug Set ...
- 1-Highcharts 3D图之普通3D柱状图与带空值
<!DOCTYPE> <html lang='en'> <head> <title>1-Highcharts 3D图之普通3D柱状图与带空值</t ...