iOS模态视图.md

iOS的模态视图

1.概念

iOS开发中,在当前视图上弹出一个视图(模态视图)例如登录视图,分享视图,注册视图等等。

2.说明

实现一个简单的多视图应用,视图控制器都会有一个presentViewController方法,用来显示模态视图窗口,在一些特别的环境下,例如登录,注册,分享等我们尤其希望使用这种方式去展现视图。

2.1 具体设置和使用

1.弹出模态视图窗口(presentViewController)方法

代码:

1
2
RegisterViewContrller *registerVc = [RegisterViewController alloc]init];
[self presentViewController:registerVc animated:YES];

2.弹出时动画风格

弹出模态窗口时,如果我们选择了动画,那么我们可以通过modalTranslationStyle属性设置动画风格

UIModalTransitionStyleCoverVertical // 底部滑入。
UIModalTransitionStyleFlipHorizontal // 水平翻转。
UIModalTransitionStyleCrossDissolve // 交叉溶解。
UIModalTransitionStylePartialCurl // 翻页。

3.回收模态视图

1
[self dissmissViewControllerAnimated:YES completion:nil];

4.presentingViewController

presentingViewController是UIViewController的属性,官方文档上这么解释

presentingViewController
The view controller that presented this view controller.

A 视图present了B视图,B视图的presentingViewContrller就是A视图

3.视图控制容器(ViewController Container)

UINavigationController/ UITabBarController/UISlipViewController等都属于ViewController Container,这些类的共性是都有一个类型为ViewController的对象数组,属性叫viewControllers,用于保存一组ViewControlller, ViewController Container会有自己默认的外观。

任何的ViewController Container对象都可以通过属性viewControllers访问子对象,而子对象也可以通过navigationController/tabbarController/slipViewController/presentViewController找到相应的viewController Container

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion;

A present B,那么A就有责任dismiss B,如果在B中调用[self dismissViewControllerAnimated…]就会A中发送dismiss,最终会由有A进行dismiss,相当于在B中执行[self.presentingViewController dismissViewControllerAnimated…]