前言

  • 大多数时候,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 的创建


  1. // 初始化分割视图控制器
  2. UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
  3. // 设置分割面板的 2 个视图控制器
  4. splitViewController.viewControllers = @[navigationController, detailViewController];
  5. // 添加到窗口
  6. [self addChildViewController:splitViewController];
  7. [self.view addSubview:splitViewController.view];
  8. // 做为 window 的根视图控制器
  9. self.window.rootViewController = splitViewController;

2、判断设备类型

  1. // 初始化列表和详情面板
  2. // 初始化列表面板,可以为表格视图控制器
  3. MasterViewController *masterViewController = [[MasterViewController alloc] init];
  4. // 初始化详情面板
  5. DetailViewController *detailViewController = [[DetailViewController alloc] init];
  6. // 用导航包装列表面板,显示导航条,如果是分割面板也不影响功能
  7. UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
  8. // 根据设备类型创建分割视图控制器
  9. /*
  10. UIUserInterfaceIdiomUnspecified = -1,
  11. UIUserInterfaceIdiomPhone NS_ENUM_AVAILABLE_IOS(3_2), // iPhone and iPod touch style UI
  12. UIUserInterfaceIdiomPad NS_ENUM_AVAILABLE_IOS(3_2), // iPad style UI
  13. UIUserInterfaceIdiomTV NS_ENUM_AVAILABLE_IOS(9_0), // Apple TV style UI
  14. UIUserInterfaceIdiomCarPlay NS_ENUM_AVAILABLE_IOS(9_0), // CarPlay style UI
  15. */
  16. // 如果是 iPhone 或 iPod 则只显示列表页,如果是 iPad 则显示分割面板
  17. if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
  18. // 添加到窗口
  19. [self addChildViewController:navigationController];
  20. [self.view addSubview:navigationController.view];
  21. }
  22. else {
  23. // 初始化分割视图控制器
  24. UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
  25. // 设置分割面板的 2 个视图控制器
  26. splitViewController.viewControllers = @[navigationController, detailViewController];
  27. // 添加到窗口
  28. [self addChildViewController:splitViewController];
  29. [self.view addSubview:splitViewController.view];
  30. // 做为 window 的根视图控制器
  31. self.window.rootViewController = splitViewController;
  32. }
  33. // 表格点击
  34. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  35. // 调用 DetailViewController 的方法更新详细页
  36. [self.splitViewController.viewControllers[1] loadDetailViewController:[dataArray
  37. objectAtIndex:indexPath.row]];
  38. // 如果是 iPhone、iPod 则导航到详情,跳转到 detailViewController,取消选中状态
  39. if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
  40. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  41. [self.navigationController pushViewController:self.splitViewController.viewControllers[1]
  42. animated:YES];
  43. }
  44. }

UISplitViewController的更多相关文章

  1. UISplitViewController - iPad分屏视图控制器

    UISplitViewController - 分屏视图控制器 概述 UISplitViewController 是一个容器vc, 展示一个 master-detail(主-详(从))界面. 主视图改 ...

  2. iOS - UISplitViewController

    前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UISplitViewController : UIViewController @available(iOS 3. ...

  3. iOS:分割控制器UISplitViewcontroller

    分割控制器UISplitViewController <1>功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个:左边的为主控制器,右边的为详细控制器,主控 ...

  4. iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)

    iPad和iPhone开发的异同 1.iPhone和iPad: niPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \ ...

  5. 分割视图控制器(UISplitViewController) 改_masterColumnWidth 导致在 IOS 10中出现闪退

    默认UISplitViewController的Master和Detail的宽度是固定的,可以通过下面的方式来改变 [splitViewController setValue:[NSNumber nu ...

  6. UISplitViewController使用

    分割控制器UISplitViewController <1>功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个:左边的为主控制器,右边的为详细控制器,主控 ...

  7. 分割视图控制器(UISplitViewController)

    这种控制器只能用于iPad,它可以在iPad屏幕中显示两个不同的场景:在横向模式下,左边显示一个表,供用户选择:用户选择表中的元素后,详细视图将显示该元素的详细信息.如果iPad被旋转到纵向模式,表将 ...

  8. ios之UISplitViewController

    iPad的屏幕比iPhone大,所以在界面上,iPad比iPhone多一个UISplitViewController,用来实现iPad在横屏时,分两栏显示所需要的界面,可以一边是目录一边是具体的内容. ...

  9. iOS Programming UISplitViewController

    iOS Programming UISplitViewController  The iPad, on the other hand, has plenty of screen space to pr ...

随机推荐

  1. MySQL最新版本 MySQL5.7.11 批量自动化一键式安装(转)

    --背景云端 以前都喜欢了源码安装MySQL,总觉得源码是高大上的事情,不过源码也需要时间,特别是make的时候,如果磁盘和cpu差的话,时间很长很长,在虚拟机上安装mysql尤其甚慢了. 现在业务发 ...

  2. AFN 请求数据https

    第一步: 导入afn库 第二步: 在pch中添加 #import <SystemConfiguration/SystemConfiguration.h> #import <Mobil ...

  3. Azure上每个VM多个IP地址

    Azure的每个VM都有多种IP地址,包括DIP.VIP和PIP.具体如下: DIP地址是在VM里能够看到的IP地址,即私网地址:PIP地址是这个VM关联的公网IP地址,即公网地址:VIP地址是负载均 ...

  4. Object-C类、方法、构造函数(2)

    Object-C 代码分为三部分:.h文件..m文件及调用文件 .h源文件 #import <Foundation/Foundation.h> @interface Student:NSO ...

  5. Rails的静态资源管理(二)—— 如何使用 Asset Pipeline

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  6. leetcode645

    vector<int> findErrorNums(vector<int>& nums) { ; int S[N]; int n = nums.size(); ; i ...

  7. 下拉框value ,selectedIndex

  8. Internet Intranet Extranet

    Internet: There's only one of it, and you're on it now. Intranet: An internal network local to a com ...

  9. 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度

    postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...

  10. 01 json环境搭建【spring + pringMVC】

    1 导包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...