内容来源:https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PresentingaViewController.html#//apple_ref/doc/uid/TP40007457-CH14-SW1
这里有两种方式来让一个view controller出现在屏幕上:
1.嵌套在container view controller里。
2.直接出场。
你可以用代码或segues来初始化view controller的出场。segues是最简单的初始化出场方式的方法。
注意:当你用UIModalPresentationFullScreen类型去呈现一个view controller时,UIKit 通常会在过渡动画完成之后,把在这个view controller底下的views给删除。用可以用UIModalPresentationOverFullScreen来阻止这种删除。当你要呈现一种有透明效果的View controller时可以用这个类型,结果会让底下的内容会透出来。
Presenting VS Showing a View Controller
・showViewController:sender: 和 showDetailViewController:sender: 方法提供和最适配和弹性的方式去展示view controller.这些方法让presenting view controller自己决定怎么最好的展示。比如:一个container view controller可以把另一个view controller纳入到自己的子VC,并模式化的呈现它。用默认行为展示这个子VC。
・ presentViewController:animated:completion: 总是程序化的展示view controller.调用这个方法的vc可能不是最终的处理展示,但是展示总是程序化的。(不懂)
Showing View Controllers
1.创建一个你要展示的view controller,并初始化。
2.设置新view controller的modalPresentationStyle 属性作为优先选用的呈现效果类型,这个类型在最终的呈现效果可能并不被使用。
3.设置新view controller的modalTransitionStyle 的属性,作为过渡动画类型,这个类型在最终的呈现效果可能并不被使用。
4.当前的view controller 调用showViewController:sender: 和showDetailViewController:sender:
注意:调用showViewController:sender: 和 showDetailViewController:sender: 。view controller能自己决定用哪个呈现效果最好。并可以改变呈现和过渡类型。比如:navigation controller可以push view controller到它的navigation stack里。
Presenting View Controllers Modally
1.创建一个你要展示的view controller,并初始化。
2.设置新view controller的modalPresentationStyle 属性作为优先选用的呈现效果类型。
3.设置新view controller的modalTransitionStyle 的属性,作为过渡动画类型。
4.当前的view controller 调用 presentViewController:animated:completion:
- (void)add:(id)sender {
// Create the root view controller for the navigation controller
// The new view controller configures a Cancel and Done button for the
// navigation bar.
RecipeAddViewController *addController = [[RecipeAddViewController alloc] init];
addController.modalPresentationStyle = UIModalPresentationFullScreen;
addController.transitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:addController animated:YES completion: nil];
}
Presenting a View Controller in a Popover
popovers 需要额外的配置。在你设置model presentation style 为 UIModalPresentationPopover之后,配置以下相关的popover相关的属性:
・设置 你的view controller的prefereredContentSize 属性作为VC想要的尺寸。
・用view controller的popoverPresentationController的属性设置popover 锚点(point),设置以下其中一个
・・设置barButtonItem属性到一个 bar button item.
・・设置sourceView和sourceRect属性到一个指定的view的区域。
Presenting a View Controller Defined in a Different Storyboard
尽管你可以在同一个storyboard的不同view controller建立segues,但你不能在两个storyboard间建立segues.
可以用以下的代码做:
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];