ViewController Programming Guide 笔记(四)

Presenting a View Controller

一般有两种方式显示 View Controller 到屏幕,嵌入到 容器 View(如Navigation Controller)和直接 present

一、The Presentation and Transition Process

你可以使用 segues 和 programmatically的方式来实现

1. Presentation Styles

UIKit 提供了一些基本的 presentation styles,除了这些基本样式,我们也可以定义自己的,先来看一下这些样式定义

enum UIModalPresentationStyle : Int {  
    case FullScreen
    case PageSheet
    case FormSheet
    case CurrentContext
    case Custom
    case OverFullScreen
    case OverCurrentContext
    case Popover
    case None
}

默认 presenting a view controller 到屏幕上使用的是 UIModalPresentationFullScreen 这种模式下,UIKit 通常会在过渡完成后移除 presentingVC 的 View,而使用 UIModalPresentationOverCurrentContext 则不会

2. Transition Styles

Transition styles 决定了展示一个 presented view controller 的动画类型,同样也可以自定义,我们先来看一下基本类型:

enum UIModalTransitionStyle : Int {  
    case CoverVertical
    case FlipHorizontal
    case CrossDissolve
    case PartialCurl
}

3. Presenting Versus Showing a View Controller

UIViewController 类提供了两种方式显示一个 VC

  • showViewController:sender:showDetailViewController:sender: 提供了自适应和灵活的方式来展示一个 VC,该方法让 presentingVC 来决定如何处理 presentation。比如一个 容器 View 可能会把将要显示的 VC 合并为自己的 child,而不是默认地用 modally 的方式去展示
  • presentViewController:animated:completion: 总是 modally 地去显示

使用 showViewController:sender:showDetailViewController:sender: 通常会是首选的方式

二、Presenting a View Controller

  • 使用 segue
  • 使用 showViewController:sender:showDetailViewController:sender:
  • 使用 presentViewController:animated:completion:

1. Showing View Controllers

使用 showViewController:sender:showDetailViewController:sender: 遵循如下过程:

①. 创建 PresentedVC ②. 设置 PresentedVCmodalPresentationStyle ③. 设置 PresentedVCmodalTransitionStyleproperty ④. 调用 showViewController:sender:showDetailViewController:sender:

2. Presenting View Controllers Modally

和上面类似,除了第 步 调用 presentViewController:animated:completion:

3. Presenting a View Controller in a Popover

Popovers 需要一些额外的设置,除了设置 presentation style 为 UIModalPresentationPopover 之外,还需要做如下设置:

  • 设置 PresentedVC 的 preferredContentSize 属性
  • 从 PresentedVC 的 popoverPresentationController 属性获取 UIPopoverPresentationController 对象,该对象负责管理显示内容到一个 popover 中。接下来你就可以设置 popover 的 anchor point 了,有下面两种方式,任选其一:
    • 设置 UIPopoverPresentationController 对象的 barButtonItem
    • 为 UIPopoverPresentationController 对象的 sourceViewsourceRect 设定指定的区域

你还可以通过 UIPopoverPresentationController 对象调整 popover 的外观

三、Dismissing a Presented View Controller

Dismiss 过程调用 dismissViewControllerAnimated:completion: 方法,如果 PresentedVC 有数据要传回 PresentingVC,请使用 Delegate 模式

四、Presenting a View Controller Defined in a Different Storyboard

如果你的 PresentedVC 是在 Stroyboard 中定义的,那么如下:

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];  
MyViewController* myVC = [sb instantiateViewControllerWithIdentifier:@"MyViewController"];

// Configure the view controller.

// Display the view controller
[self presentViewController:myVC animated:YES completion:nil];

-EOF-

如果感觉此文对你有帮助,请随意打赏支持作者 😘

chengway

认清生活真相之后依然热爱它!

Subscribe to Talk is cheap, Show me the world!

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!