【IOS 开发学习总结-OC-60】ipad应用开发的一些知识

ipad与iPhone上 管理有层次的工作流的不同

iPhone上:通过NavigationController,用户可以从上一层界面A到下一层界面B,当 B 处理完后,再返回 A。

ipad上:由于 ipad 屏幕比 iPhone 大的多,所以它就没有通过NavigationController来管理这种关系。——通常是在 iPad 的左边显示一个导航列表框,当单击左边的某个导航项时,该窗口的右边将会显示该导航对应的详情。——这就是 iPad 上的专用控件:UISplitVIewController.

UISplitVIewController——ipad 专用

iPad横向时

iPad 处于横向模式,UISplitVIewController的左侧会出现320px 的侧栏——常用于显示页面导航栏。右侧通常用于显示导航栏对应的详情。

iPad纵向时

UISplitVIewController的左侧的导航栏不再固定显示在左边,而是需要单击某个工具按钮来激活它。——这时,会有个浮动窗口(popover) 来显示导航栏。

图片出自:http://course.gdou.com/blog/Blog.pzs/archive/2011/11/8/10838.html

UISplitVIewController的用法

UISplitVIewController 只是用来管理左右2个 UIviewController,并没有多大额外作用。

使用UISplitVIewController的大致步骤:
1. 创建UISplitVIewController对象,
2. 通过vIewControllers 属性为UISplitVIewController设置左右2个vIewController。
3. 为UISplitVIewController设置 delegate,该属性必须实现UISplitViewControllerDelegate协议的对象。该对象负责额处理UISplitVIewController左侧导航栏的显示和隐藏事件。

UISplitViewControllerDelegate协议中的方法。

@protocol UISplitViewControllerDelegate@optional// This method allows a client to update any bar button items etc.
- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode NS_AVAILABLE_IOS(8_0);
//将改变显示模式时- (UISplitViewControllerDisplayMode)targetDisplayModeForActionInSplitViewController:(UISplitViewController *)svc NS_AVAILABLE_IOS(8_0);
//Asks the delegate to provide the display mode to apply when a split view controller action occurs.// Override this method to customize the behavior of `showViewController:` on a split view controller. Return YES to indicate that you've handled
// the action yourself; return NO to cause the default behavior to be executed.
- (BOOL)splitViewController:(UISplitViewController *)splitViewController showViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0);- (BOOL)splitViewController:(UISplitViewController *)splitViewController showDetailViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0);
//是否显示详细视图控制器// Return the view controller which is to become the primary view controller after `splitViewController` is collapsed due to a transition to
// the horizontally-compact size class. If you return `nil`, then the argument will perform its default behavior (i.e. to use its current primary view
// controller).
- (nullable UIViewController *)primaryViewControllerForCollapsingSplitViewController:(UISplitViewController *)splitViewController NS_AVAILABLE_IOS(8_0);// Return the view controller which is to become the primary view controller after the `splitViewController` is expanded due to a transition
// to the horizontally-regular size class. If you return `nil`, then the argument will perform its default behavior (i.e. to use its current
// primary view controller.)
- (nullable UIViewController *)primaryViewControllerForExpandingSplitViewController:(UISplitViewController *)splitViewController NS_AVAILABLE_IOS(8_0);// This method is called when a split view controller is collapsing its children for a transition to a compact-width size class. Override this
// method to perform custom adjustments to the view controller hierarchy of the target controller.  When you return from this method, you're
// expected to have modified the `primaryViewController` so as to be suitable for display in a compact-width split view controller, potentially
// using `secondaryViewController` to do so.  Return YES to prevent UIKit from applying its default behavior; return NO to request that UIKit
// perform its default collapsing behavior.
- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController NS_AVAILABLE_IOS(8_0);// This method is called when a split view controller is separating its child into two children for a transition from a compact-width size
// class to a regular-width size class. Override this method to perform custom separation behavior.  The controller returned from this method
// will be set as the secondary view controller of the split view controller.  When you return from this method, `primaryViewController` should
// have been configured for display in a regular-width split view controller. If you return `nil`, then `UISplitViewController` will perform
// its default behavior.
- (nullable UIViewController *)splitViewController:(UISplitViewController *)splitViewController separateSecondaryViewControllerFromPrimaryViewController:(UIViewController *)primaryViewController NS_AVAILABLE_IOS(8_0);- (UIInterfaceOrientationMask)splitViewControllerSupportedInterfaceOrientations:(UISplitViewController *)splitViewController NS_AVAILABLE_IOS(7_0);
- (UIInterfaceOrientation)splitViewControllerPreferredInterfaceOrientationForPresentation:(UISplitViewController *)splitViewController NS_AVAILABLE_IOS(7_0);// Called when a button should be added to a toolbar for a hidden view controller.
// Implementing this method allows the hidden view controller to be presented via a swipe gesture if 'presentsWithGesture' is 'YES' (the default).
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc NS_DEPRECATED_IOS(2_0, 8_0, "Use splitViewController:willChangeToDisplayMode: and displayModeButtonItem instead");// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem NS_DEPRECATED_IOS(2_0, 8_0, "Use splitViewController:willChangeToDisplayMode: and displayModeButtonItem instead");// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController:(UISplitViewController *)svc popoverController:(UIPopoverController *)pc willPresentViewController:(UIViewController *)aViewController NS_DEPRECATED_IOS(2_0, 8_0, "Use splitViewController:willChangeToDisplayMode: instead");// Returns YES if a view controller should be hidden by the split view controller in a given orientation.
// (This method is only called on the leftmost view controller and only discriminates portrait from landscape.)
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation  NS_DEPRECATED_IOS(5_0, 8_0, "Use preferredDisplayMode instead");
//左侧导航栏将要显示时激发该方法@end

UIPopoverController ——ipad 专用

UIPopoverController代表浮动导航栏。——其实就是包装一个 UIViewController作为浮动窗口。

UIPopoverController使用的大致步骤

  1. 创建一个UIPopoverController对象,指定它将要包装的视图控制器;
  2. 可根据需要,调用 popoverContentSize 属性设置UIPopoverController的大小;
  3. 调用- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;或者- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;方法将该浮动窗口显示出来。
  4. 用户处理完后,调用- (void)dismissPopoverAnimated:(BOOL)animated;方法关闭浮动窗口。

UIPopoverController的.h文件。

@interface UIPopoverController : NSObject <UIAppearanceContainer> {}- (instancetype)initWithContentViewController:(UIViewController *)viewController;@property (nullable, nonatomic, weak) id <UIPopoverControllerDelegate> delegate;@property (nonatomic, strong) UIViewController *contentViewController;
- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;@property (nonatomic) CGSize popoverContentSize;
- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;@property (nullable, nonatomic, copy) NSArray<__kindof UIView *> *passthroughViews;- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;- (void)dismissPopoverAnimated:(BOOL)animated;/* Set popover background color. Set to nil to use default background color. Default is nil.*/
@property (nullable, nonatomic, copy) UIColor *backgroundColor NS_AVAILABLE_IOS(7_0);@property (nonatomic, readwrite) UIEdgeInsets popoverLayoutMargins NS_AVAILABLE_IOS(5_0);@property (nullable, nonatomic, readwrite, strong) Class popoverBackgroundViewClass NS_AVAILABLE_IOS(5_0);@end//UIPopoverControllerDelegate协议
@protocol UIPopoverControllerDelegate <NSObject>
@optional- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController NS_DEPRECATED_IOS(3_2, 9_0);- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController NS_DEPRECATED_IOS(3_2, 9_0);- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView * __nonnull * __nonnull)view NS_DEPRECATED_IOS(7_0,9_0);@end

兼容 iPhone 与 iPad 的方法

UIDevice类中头文件中常见的方法与属性。

+ (UIDevice *)currentDevice;@property(nonatomic,readonly,strong) NSString    *name;              // e.g. "My iPhone"
@property(nonatomic,readonly,strong) NSString    *model;             // e.g. @"iPhone", @"iPod touch"
@property(nonatomic,readonly,strong) NSString    *localizedModel;    // localized version of model
@property(nonatomic,readonly,strong) NSString    *systemName;        // e.g. @"iOS"
@property(nonatomic,readonly,strong) NSString    *systemVersion;     // e.g. @"4.0"
@property(nonatomic,readonly) UIDeviceOrientation orientation;       // return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.

UIDevice对象的UIUserInterfaceIdiom属性可返回一个枚举值,如下:

typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {UIUserInterfaceIdiomUnspecified = -1,UIUserInterfaceIdiomPhone NS_ENUM_AVAILABLE_IOS(3_2), // iPhone and iPod touch style UIUIUserInterfaceIdiomPad NS_ENUM_AVAILABLE_IOS(3_2), // iPad style UI
};

判断代码格式如下:

if ([[UIDevice currentDevice] userInterfaceIdiom]== UIUserInterfaceIdiomPhone){// 直接使用masterNavigationController作为应用窗口的根控制器self.window.rootViewController  .....}// 如果运行设备为iPadelse{....}

【IOS 开发学习总结-OC-60】ipad应用开发的一些知识相关推荐

  1. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  2. iOS开发学习48 OC的lambda block

    iOS开发学习48 lambda表达式 一.block 简介 二.block使用 1. block的写法大概就是这样: 2. 带参数的话可以这样写: 3. 如果不写入参,可以写: 4. 当然返回也可以 ...

  3. Linux 内核学习知识:浅析 offsetof 宏以及内核开发学习的所思所想(内核开发人员必读)

    最近一头扎进了 Linux 内核的学习中,Linux 内核的学习,需要的基础知识太多太多了:C 语言.汇编语言.数据结构与算法.操作系统原理.计算机组成原理.计算机体系结构.在囫囵吞枣补完一些计算机基 ...

  4. 【实验室培训】大学生的Java后端开发学习之路(从App开发讲起)

    文章目录 前言 一.浅谈如何开发一款App 1.一个好的idea 2.根据这个idea完善好具体的需求 3.分工合作 4.设计阶段 ①UI设计 ②接口设计 ③架构设计 5.开发阶段 6.测试阶段 7. ...

  5. Salesforce Lightning开发学习(二)Component组件开发实践

    lightning的组件区分标准组件.自定义组件和AppExchange组件.标准组件由SF提供,自定义组件由developer自行开发,AppExchange组件由合作伙伴建立.下面我们写一个简单的 ...

  6. 微信开发学习总结(一)——微信开发环境搭建

    目前移动开发处于比较火的的趋势,很多的开发者都跃跃欲试,目前移动App开发领域主要分为以下几种类型: 一.微信开发环境搭建 工欲善其事,必先利其器.要做微信公众号开发,那么要先准备好两样必不可少的东西 ...

  7. 游戏开发学习记录01-关于在Unity开发的游戏中部署后端云的选择

    目前我还是一名在校学生,而且现在还没有学习数据库方面的知识,所以目前我不具备后端搭建服务器和数据库的知识.所以在之前学习安卓开发过程中,了解到了现在有一种服务-后端云,可以不用费时的去完成后端的开发, ...

  8. 微信小程序云开发学习(一)/ 设置云开发 与 数据查询

    1.创建项目 这里我选的第二个 :不使用云服务,生成的目录和正常的小程序目录一样,然后自己新建一个云环境的目录 cloud,填上自己的appid 如果选了第一种 小程序与开发的话 ,目录他自会自动生成 ...

  9. iOS完整学习路线图

    --http://blog.csdn.net/q199109106q/article/details/8596506 --http://edu.51cto.com/roadmap/view/id-7. ...

最新文章

  1. 听说,英特尔要对外开放 x86 授权?
  2. IIS监控--自动重启脚本工具
  3. 图解TC++3.0开发教程
  4. 数据绑定(三)为Binding指定绑定源的几种方法
  5. ElasticSearch搜索引擎:常用的存储mapping配置项 与 doc_values详细介绍
  6. python的日期格式化_Python日期格式化-阿里云开发者社区
  7. 世界上有三样东西不能相信(引用)心胸狭窄的男人勿看
  8. 用康托展开实现全排列(STL、itertools)
  9. 【何之源-21个项目玩转深度学习】——Chapter3-3.2 数据准备-将图像数据转为tfrecord形式
  10. win10 shift+右键打开cmd
  11. 组成原理之全加器实验
  12. 用正则表达式抓取网页图片
  13. unity游戏模型获取- AssertStudio(原GuiStudio)(以第二银河为例)
  14. Mono.Cecil使用示例之给UnityEditor.dll中的ConsoleWindow添加双击委托
  15. 闫刚 linux下对u盘进行分区格式化
  16. 生物信息学|疾病预测的个体特定边网络分析
  17. 二、Node 多版本管理
  18. 无穷小微积分教材的结束语
  19. 润乾报表的竞争对手到底是谁?
  20. python随机抽号_使用python的random编写抽奖程序

热门文章

  1. Python | 别人家的代码 if __name__ == '__main__' 到底什么意思?
  2. B站倍速如何实现,B站1.75倍速
  3. Oracle主库redo传输至备机,oracle物理DG管理-redo数据传输,应用与三种模式
  4. 江西省赣州市于都县有计算机学校吗,江西省于都县职业中等专业学校联系方式...
  5. 利用NAT实现外网主机访问内网服务器(原创)
  6. 【python】廖雪峰学习笔记
  7. 人才一站式服务平台开发,高层次人才管理系统
  8. 微软new bing chatgpt 逆向爬虫实战
  9. 《Python基础教程》学习笔记——抽象
  10. 腾讯云发布金融国产化战略、《腾讯云银行核心系统分布式转型白皮书》