[iOS基础]从使用UIPopoverController到UIViewController弹出模态

描述

在iPad中,UIPopoverController可以说比较常见,比如点击某个按钮,会弹出一个带箭头的View,可以在View上进行操作,点击View的其他领域,View消失。

使用

UIPopoverController的使用至少有如下 4 步:

//第一步:通过一个UIViewController初始化一个UIPopoverController,其中exportViewCon是已经定义好的UIViewController
UIPopoverController *popPreCon = [[UIPopoverController alloc] initWithContentViewController:exportViewCon];
//第二步:指定UIPopoverController的视图大小
popPreCon.popoverContentSize = CGSizeMake(320, 506);
//第三步:指定唤起UIPopoverController的UIBarButton以及UIPopoverController的箭头方向
//第四步:展示出来
[popPreCon presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

细节

当然,UIPopoverController也有其他的一些属性,包括一个UIPopoverControllerDelegate,详见链接:UIPopoverController。然而当你打开后你会发现,TMD都是划横线了(被苹果舍弃了)!!
原因是因为上面的代码只能在iPad上面运行,但是如果想要在iPhone上面也运行,就需要使用下面的方式:

iOS8 新特性

UIPopoverPresentController和UIModelPresentationPopover

//示例代码
//第一步:初始化UIViewController
ExportViewController *exportViewCon = [[ExportViewController alloc] init];
//第二步:将UIViewController封装成为Popover
exportViewCon.modalPresentationStyle = UIModalPresentationPopover;
//第三步:设置popoverPresentationController的button or barbtton
exportViewCon.popoverPresentationController.barButtonItem = self.navigationItem.rightBarButtonItem;
//第四步:设置popover的size
exportViewCon.preferredContentSize = CGSizeMake(320, 506);
//第五步:展示出来    
[self presentViewController:exportViewCon animated:YES completion:nil];

UIViewController弹出模态

原来的UIPopoverController继承自UIViewController,实现需要用UIPopoverController去封装需要展现的UIViewController。
现在UIViewController变得更加强大,只需要更改一下弹出模态的style就能够有相应的效果:

UIModalPresentationStyle展现的形态

UIModalPresentationStyle效果
UIModalPresentationFullScreen全屏,portrait和landscape一样
UIModalPresentationPageSheetlandscape非全屏两边会有暗色留空,portrait则全屏
UIModalPresentationFormSheet非全屏,四周会有暗色留空
UIModalPresentationCurrentContext与父辈Controller一致
UIModalPresentationCustom自定义模式
UIModalPresentationOverFullScreen与非Over的区别在于底层的Views并不会被remove,因此如果ViewController没有全覆盖,底层的Views会透出来
UIModalPresentationOverCurrentContextUIKit会查找哪个UIViewController的definesPresentationContext是YES,就用哪个作为style,Over效果同FullScreen效果一样,如果在popover上弹出视图,一定要用CoverVertical效果,否则异常
UIModalPresentationPopover就是Popover啦
UIModalPresentationNone一般不用该style,但是可以adaptivePresentationStyleForPresentationController: 方法返回该字段实现与之前不同的弹出模态

UIModalTransitionStyle弹出的效果

UIModalTransitionStyle效果
UIModalTransitionStyleCoverVertical从底下滑出来,从底下滑出去
UIModalTransitionStyleFlipHorizontal从右边滑出来,从右边滑出去
UIModalTransitionStyleCrossDissolve渐变出来与消失
UIModalTransitionStylePartialCurl类似于翻书效果,一般父辈Controller要用FullScreen模式,否则异常
//弹出Controller,此时self是父辈Controller
[self presentViewController:exportViewCon animated:YES completion:nil];
//销毁Controller此时self是弹出的Controller
[self dismissViewControllerAnimated:YES completion:nil];

参考文章:http://blog.csdn.net/james_1010/article/details/8845830

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值