1、主要用途

  • 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等。弹出模态ViewController
  • 主要使用于一下这几种情形:

    • 1、收集用户输入信息
    • 2、临时呈现一些内容
    • 3、临时改变工作模式
    • 4、相应设备方向变化(用于针对不同方向分别是想两个ViewController的情况)
    • 5、显示一个新的view层级
    • 这几种情形都会暂时中断程序正常的执行流程,主要作用是收集或者显示一些信息。

2、弹出方法:presentModalViewController:

  • 由 视图控制器类对象调用presentModalViewController: 方法。
  • 以模态窗口的形式管理视图,当前视图关闭前其他视图上的内容无法操作。

3、modalTransitionStyle属性

  • 通过设置设置presenting VC的modalTransitionStyle属性,我们可以设置弹出presented VC时场景切换动画的风格,包含类型如下:
  1. typedef enum {
  2. UIModalTransitionStyleCoverVertical, // 自下而上(从底部滑入)
  3. UIModalTransitionStyleFlipHorizontal, // 自左至右180度翻转(水平翻转进入)
  4. UIModalTransitionStyleCrossDissolve, // 淡出效果(交叉溶解)
  5. UIModalTransitionStylePartialCurl // 翻页效果
  6. } UIModalTransitionStyle;
  • 这四种风格在不受设备的限制,即不管是iPhone还是iPad都会根据我们指定的风格显示转场效果。

4、Modal Presentation Styles(弹出风格)

  • 通过设置presenting VC的modalPresentationStyle属性,我们可以设置弹出View Controller时的风格,有以下四种风格,其定义如下:
  1. typedef enum {
  2. UIModalPresentationFullScreen = 0,
  3. UIModalPresentationPageSheet,
  4. UIModalPresentationFormSheet,
  5. UIModalPresentationCurrentContext,
  6. } UIModalPresentationStyle;
  • 4.1 UIModalPresentationFullScreen

    • 代表弹出VC时,presented VC充满全屏,如果弹出VC的wantsFullScreenLayout设置为YES的,则会填充到状态栏下边,否则不会填充到状态栏之下。
  • 4.2 UIModalPresentationPageSheet

    • 代表弹出是弹出VC时,presented VC的高度和当前屏幕高度相同,宽度和竖屏模式下屏幕宽度相同,剩余未覆盖区域将会变暗并阻止用户点击,这种弹出模式下,竖屏时跟UIModalPresentationFullScreen的效果一样,横屏时候两边则会留下变暗的区域。
  • 4.3 UIModalPresentationFormSheet

    • 这种模式下,presented VC的高度和宽度均会小于屏幕尺寸,presented VC居中显示,四周留下变暗区域。
  • 4.4 UIModalPresentationCurrentContext

    • 这种模式下,presented VC的弹出方式和presenting VC的父VC的方式相同。
  • 这四种方式在iPad上面统统有效,但在iPhone和iPod touch上面系统始终已UIModalPresentationFullScreen模式显示presented VC。

5、关闭方法:dismissModalViewControllerAnimated:

  • 由 视图控制器类对象调用dismissModalViewControllerAnimated: 方法。

6、获取不同的模态窗口(主要的属性)

  1. @property(nonatomic, readonly) UIViewController *presentedViewController ; // 当前控制器模态出的窗口
  2. @property(nonatomic, readonly) UIViewController *presentingViewController; // 模态出当前控制器的窗口

7、处理模态窗口(主要的方法)

  1. // 显示想要显示的模态窗口
  2. - (void)presentViewController:(UIViewController *)viewControllerToPresent
  3. animated: (BOOL)flag
  4. completion:(void (^)(void))completion);
  5. // 关闭当前显示的模态窗口
  6. - (void)dismissViewControllerAnimated: (BOOL)flag
  7. completion: (void (^)(void))completion);
  8. // 当前控制器模态另一个窗口并传输数据时调用的方法
  9. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)

8、使用提醒

presenting view controller Vs presented view controller

  • 当我们在view controller A中模态显示view controller B的时候,A就充当presenting view controller(弹出VC),而B就是presented view controller(被弹出VC)。官方文档建议这两者之间通过delegate实现交互,如果使用过UIImagePickerController从系统相册选取照片或者拍照,我们可以发现imagePickerController和弹出它的VC之间就是通过UIImagePickerControllerDelegate实现交互的。因此我们在实际应用用,最好也遵守这个原则,在被弹出的VC中定义delegate,然后在弹出VC中实现该代理,这样就可以比较方便的实现两者之间的交互。

9、示例

  1. ModalTestController *vc = [[ModalTestController alloc] init];
  2. vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  3. vc.hidesBottomBarWhenPushed = YES;
  4. UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:vc];
  5. navi.definesPresentationContext = YES;
  6. navi.modalPresentationStyle = UIModalPresentationCurrentContext;
  7. [self.navigationController presentViewController:navi animated:YES completion:^{
  8. navi.navigationBarHidden = YES;
  9. }];

模态显示PresentModalViewController的更多相关文章

  1. IOS疯狂基础之模态显示PresentModalViewController(转)

    转自:http://blog.csdn.net/wudizhukk/article/details/8553554 -(void)buttonDown:(id)sender{ ViewTwo *two ...

  2. div模态显示内容

    业务需要,上传的图片,本地显示大图: 模态代码: <div onclick="hidebigimg()" class = "bg-model" style ...

  3. 关于iPad上模态显示视图中的UITextField,UITextView在输入完成后无法回收键盘的问题解决。

    在iPad开发过程中遇到一个问题,UITextField 存在由UIModalPresentationFormSheet 弹出的带导航条的视图控制器中时,调用 resignFirstResponder ...

  4. 弹出视图/弹出模态presentViewController与presentModalViewController

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

  5. iOS:视图切换的第一种方式:模态窗口

    一.UIModalController:模态窗口(一个控制器模态出另一个控制器的模态窗口) 当我们在view controller A中模态显示view controller B的时候,A就充当pre ...

  6. IOSView显示特性设置

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

  7. QT笔记之模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  8. iOS:模态弹出窗控制器UIPopoverPresentationController

    模态弹出窗控制器:UIPopoverPresentationController 实质:就是将内容控制器包装成PopoverPresentationController的形式,然后再模态出来,必须指定 ...

  9. QT模态弹出对话框

    QDialog QWidget 默认show()都是非模态 如果需要模态显示, QDialog ==> setModal(true); show(); exec(); QWidget ==> ...

随机推荐

  1. Oracle常见的表连接的方法

    1 排序合并连接SMJ Sort merge join 排序合并总结: 1 通常情况下,排序合并连接的效率远不如hash join,前者适用范围更广,hj只使用于等值连接,smj范围更广(<,& ...

  2. cocoa 线程操作

    在Cocoa 中创建线程使用NSThread类的detachNewThreadSelector: toTarget:withObject:方法 NSPort *port1 = [NSPort port ...

  3. 聚类 高维聚类 聚类评估标准 EM模型聚类

    高维数据的聚类分析 高维聚类研究方向 高维数据聚类的难点在于: 1.适用于普通集合的聚类算法,在高维数据集合中效率极低 2.由于高维空间的稀疏性以及最近邻特性,高维的空间中基本不存在数据簇. 在高维聚 ...

  4. 使用CallableStatement接口调用存储过程

    直接上下代码: package com.learn.jdbc.chap07; import java.sql.CallableStatement; import java.sql.Connection ...

  5. C#使用HttpHelper类抓取html网页内容

    HttpHelper类(苏飞版)下载地址: http://www.sufeinet.com/thread-3-1-1.html 使用方法及说明(摘自:http://blog.csdn.net/smar ...

  6. NODEJS网站

    nodejs https://nodejs.org/en/ nodejs官网 http://nodeapi.ucdok.com/#/api/ nodejs手册 https://www.npmjs.co ...

  7. Leetcode:ZigZag Conversion分析和实现

    问题的大意就是将字符串中的字符按锯齿状(倒N形)垂直由上向下放置,最后水平从左向右读取.比如 ABCDEFGHIJKLMN,4表示 A          G      M B      F  H    ...

  8. Python:cmd传参

    假如你写了一个文件test.py,你需要三个参数,你运行时: python test.py arg1 arg2 arg3 在test.py中读取这几个参数: import sys print 'Num ...

  9. 刷题向》DP》放苹果 (normal)

    这篇博客可能字数比较多,而且很难讲清楚,我会努力给你们讲清楚: 首先,放苹果是一道DP,之所以难,是因为很难想到,我的确有同学用三维数组做出来,然而三维的的确比二维好理解,但三维复杂度太高,虽然DP一 ...

  10. Python学习笔记_我的参考网址

    Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...