UISplitViewController
前言
- 大多数时候,iPhone、iPod 应用与 iPad 应用开发没有太大的区别,但是 iPad 的屏幕比 iPhone 大,
- 设计程序时可以充分利用 iPad 的大屏幕特点,例如 TabBar 和 Navigation 的使用会减少,
- 相应的会采用新的一种 ViewController 来代替,那就是 UISplitViewController,这个控件是 iPad 专用的视图控制器。
- 使用 SplitViewController 导航时,横屏情况下,左边显示一个导航表,点击导航项时右边显示对应的详情。
- 横屏情况下显示方式会有所不同,默认只显示详情面板,原来左侧的导航列表会通过浮动窗口隐藏,需要从边缘向内侧拖动来显示。
- 在 iPhone 应用中,使用导航控制器由上一层界面进入下一层界面,在下一层界面处理完成后,用户可以非常方便的返回上一层界面。
- 这种方式在 iPhone 应用里非常方便,因为小屏幕通常只能显示一个界面,但对于 iPad 来说,那么大的屏幕只显示一个列表会显得不太好看,
- 同时用户操作也不方便,所以在 iPad 中,通常使用 SplitViewController 来实现导航。
- iPhone 和 iPad 的系统设置就是典型的按设备区别界面的应用。
- self.splitViewController.viewControllers[0] // 表示 Master 页
- self.splitViewController.viewControllers[1] // 表示 Detail 页
1、splitViewController 的创建
// 初始化分割视图控制器
UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
// 设置分割面板的 2 个视图控制器
splitViewController.viewControllers = @[navigationController, detailViewController];
// 添加到窗口
[self addChildViewController:splitViewController];
[self.view addSubview:splitViewController.view];
// 做为 window 的根视图控制器
self.window.rootViewController = splitViewController;
2、判断设备类型
// 初始化列表和详情面板
// 初始化列表面板,可以为表格视图控制器
MasterViewController *masterViewController = [[MasterViewController alloc] init];
// 初始化详情面板
DetailViewController *detailViewController = [[DetailViewController alloc] init];
// 用导航包装列表面板,显示导航条,如果是分割面板也不影响功能
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
// 根据设备类型创建分割视图控制器
/*
UIUserInterfaceIdiomUnspecified = -1,
UIUserInterfaceIdiomPhone NS_ENUM_AVAILABLE_IOS(3_2), // iPhone and iPod touch style UI
UIUserInterfaceIdiomPad NS_ENUM_AVAILABLE_IOS(3_2), // iPad style UI
UIUserInterfaceIdiomTV NS_ENUM_AVAILABLE_IOS(9_0), // Apple TV style UI
UIUserInterfaceIdiomCarPlay NS_ENUM_AVAILABLE_IOS(9_0), // CarPlay style UI
*/
// 如果是 iPhone 或 iPod 则只显示列表页,如果是 iPad 则显示分割面板
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
// 添加到窗口
[self addChildViewController:navigationController];
[self.view addSubview:navigationController.view];
}
else {
// 初始化分割视图控制器
UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
// 设置分割面板的 2 个视图控制器
splitViewController.viewControllers = @[navigationController, detailViewController];
// 添加到窗口
[self addChildViewController:splitViewController];
[self.view addSubview:splitViewController.view];
// 做为 window 的根视图控制器
self.window.rootViewController = splitViewController;
}
// 表格点击
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// 调用 DetailViewController 的方法更新详细页
[self.splitViewController.viewControllers[1] loadDetailViewController:[dataArray
objectAtIndex:indexPath.row]];
// 如果是 iPhone、iPod 则导航到详情,跳转到 detailViewController,取消选中状态
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[self.navigationController pushViewController:self.splitViewController.viewControllers[1]
animated:YES];
}
}
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使用
分割控制器UISplitViewController <1>功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个:左边的为主控制器,右边的为详细控制器,主控 ...
- 分割视图控制器(UISplitViewController)
这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...
- 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 ...
随机推荐
- git公钥生成以及与coding等联合
更好用的 https://segmentfault.com/a/1190000002645623 其中 $ ssh -T git@github.comgitbub $ ssh -T git@git.c ...
- 蓝桥杯 历届试题 PREV-1 核桃的数量
历届试题 核桃的数量 时间限制:1.0s 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑 ...
- Java-API:java.util.Random
ylbtech-Java-API:java.util.Random 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://docs.oracle. ...
- docker 端口映射iptables: No chain/target/match by that name错误解决方法
pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 service docker restart
- Python多进程-进程锁
多进程虽然不允许多个进程同时修改同一份数据,但是多进程也有锁,为了在屏幕上打印的时候不出现两个进程同时执行的显示错误 # -*- coding:utf-8 -*- __author__ = " ...
- pl/sql对excel数据的导入和导出
本来这部分是在上篇pl/sql的,但笔者介于此篇的内容,就独立出来了, 1.导出查询结果到excel文件,在查询结果上右键,然后弹出选择框如下: 2.从excel向数据库中导入数据: a.创建要导入的 ...
- Github修改项目显示的语言类型
//仓库的根目录下创建 .gitattributes 文件,添加以下代码: *.js linguist-language=java *.css linguist-language=java *.htm ...
- Win 7系统优化/设置小工具 (脚本)
Win7系统优化脚本 用了多年win7,用的过程中,发现了一些问题,关于系统基本的优化,和个人的使用习惯设置等等,做成了一个脚本,可以一键设置win7的系统设置,比如更新提醒,关闭防火墙提示,烦人的系 ...
- 基于IFC标准的4DBIM可视化平台
- CH24C 逃不掉的路
edcc缩点之后跳倍增lca 丢个edcc缩点模板 Code: #include <cstdio> #include <cstring> using namespace std ...