IOS下的模态窗口

来源:互联网 发布:软件开发加班情况 编辑:程序博客网 时间:2024/05/28 18:43



IOS下的视图控制器都会有一个presentViewController方法,用来显示模态窗口,在一些特别的环境下我们尤其愿意使用这种窗口,例如临时呈现一些内容时(登录视图、分享列表视图等),所以今天在这里做一下整理。

 

一、具体设置和使用

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

  样例代码为:

GreenViewController *greenViewController = [[GreenViewController alloc] init];

方法1:[self presentModalViewController:greenViewController animated:YES];

方法2:[self presentViewController:greenViewController animated:YES completion:nil];

两种方法都可以弹出模态视图窗口,方法2使用了block封装,如果在动画弹出模块窗口后有其它的操作,可以使用些方法。

 

2、弹出风格(UIModalPresentationStyle属性)

  UIModalPresentationFullScreen充满全屏,对于IOS7以后版本,如果弹出视图控制器的wantsFullScreenLayout设置为YES的,则会填充到状态栏下边,否则不会填充到状态栏之下。

IOS下的模态窗口

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

IOS下的模态窗口

  UIModalPresentationFormSheet高度和宽度均会小于屏幕尺寸,居中显示,四周留下变暗区域。

IOS下的模态窗口

  UIModalPresentationCurrentContext这种模式下,弹出视图控制器的弹出方式和它的父VC的方式相同。

IOS下的模态窗口

  对于iphone或iTouc,只有UIModalPresentationFullScreen一种风格,即使设置成其它风格也没起作用。

 

3、弹出时的动画风格(UIModalTransitionStyle属性)

  弹出模态窗口时,如果我们选择了动画显示,那么我们可以通过modalTransitionStyle属性来设置切入动画的风格。
   UIModalTransitionStyleCoverVertical  // 底部滑入。

UIModalTransitionStyleFlipHorizontal // 水平翻转。

UIModalTransitionStyleCrossDissolve // 交叉溶解。

UIModalTransitionStylePartialCurl // 翻页。

动画风格不受设备的限制,即不管是iPhone还是iPad都会根据我们指定的风格显示转场效果。

 

4、回收模块视图窗口(dismissModalViewControllerAnimated方法)

方法一:[self dismissModalViewControllerAnimated:YES]
    方法二:[self dismissViewControllerAnimated:YES completion:nil];

 

注:self为弹出的模块视图控制器

 

总结:

1、每个视图控制器都可以作为模块窗口来显示,但任何时候应用中如果有一个视图控制器被弹出了,那么再弹其它的视图控制器时都不会有效果。

2、模块窗口的显示必需由其它视图控制器调用presentViewController方法来实现;而模块窗口的隐藏(dismiss)是由自己来调用dismissModalViewControllerAnimated方法来实现。即模块窗口是基于其它视图控制器而显示,但它的回收(dismiss)是基本自身。

3、UIModalPresentationFormSheet风格的模块窗口,如果有输入框,整个视图会根据键盘的显隐自动调整。而且整个模块窗口的大小是可以设置的(greenViewController .view.superview.bounds = CGRectFromString(framePortrait))。如果模块窗口在显示时自动定位光标到文本框,例如:

- (void)viewDidAppear:(BOOL)animated {
    [contentTextView becomeFirstResponder];
}

此时模块视图已经根据键盘显示调整到正确的位置,可能由于我们在之前设置模块窗口的bounds

GreenViewController *greenViewController = [[GreenViewController alloc] init];

greenViewController .modalPresentationStyle = UIModalPresentationFormSheet;

[self presentModalViewController:greenViewController animated:YES];

 greenViewController .view.superview.bounds = CGRectFromString(framePortrait);
    这样就造成了模块窗口在屏幕中间显示,但键盘的出现会挡住大部分内容。如下图:


IOS下的模态窗口
0 0
原创粉丝点击