前言

  • 大多数时候,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的更多相关文章

  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. jquery中stop停止动画笔记

    jQuery stop() 方法用于停止动画或效果,在它们完成之前. stop() 方法适用于所有 jQuery 效果函数,包括滑动.淡入淡出和自定义动画. 语法: $(selector).stop( ...

  2. RabbitMQ 基本概念和使用

    当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本.AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客 ...

  3. net.sf.json.JSONObject 和org.json.JSONObject

    参考 net.sf.json.JSONObject 和org.json.JSONObject 的差别

  4. PHP类(二)-类的构造方法和析构方法

    构造方法 构造方法是对象创建完成后第一个被对象自动调用的方法,用来完成对象的初始化 在每个类中都会有一个构造方法,如果没有声明的话,类中会存在一个没有参数列表并且内容为空的构造方法.如果声明的话,默认 ...

  5. MySQL组合索引最左匹配原则

    几个重要的概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. 2.对于多列索引来说(a,b,c)其相当于3个索引(a),(a,b),(a,b,c)3个索引,又 ...

  6. Solaris与Windows Active Directory集成

    通过Solaris与Active Directory的集成,Solaris可以使用Windows 2003 R2/ 2008 Active Directory来进行用户登录验证.以下是简要配置过程. ...

  7. GridControl 隐藏Drag a column header here to group by that column

    解决方案: 打开设计器,找到OptionsView,往下拉设置showGroupPanel为false 

  8. appium如何连接模拟器代码实例

    from appium import webdriver def connect(self): self.desired_caps = {} self.desired_caps['platformNa ...

  9. Android中同一个ImageView中根据状态显示不同图片

    一般: if(条件1) { image.setBackground(R.id.xxx1); } else if (条件2) { image.setBackground(R.id.xxx2); } 实际 ...

  10. 每天一道算法题(12)——和为n的连续正数序列或者随机数

    题目:输入一个正数n,输出所有和为n 连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 1.思路 尊崇以下策略: (1)对 ...