ios9刚出才不久,很多IT行业的大牛和新人都开始慢慢的尝试打算开始习惯去使用ios9的新特性
而pop也是苹果升级之后稍作改变的一点,在ios9开始以前ipad开始常用的UIPopoverController已经开始被苹果抛弃
而ios8开始出现UIPopoverPresentationController即将代替UIPopoverPresentationController,不过iphone6s和iphone6sp的到来,UIPopoverPresentationController能让pop显示做到最大的发挥,UIPopoverController只能在iPad上做pop显示,一旦使用到iPhone上就会报错,而UIPopoverPresentationController不仅仅不会抱错,更能在iPhone下做pop显示,这样很多开发人员不需要为了了iPad和iPhone的UI而做两套控件
下面我就介绍下关于UIPopoverPresentationController在iPhone上做pop显示的方法介绍
#import "myviewcontroller.h"
//在iPhone上显示需要遵守<UIPopoverPresentationControllerDelegate>协议
@interface myviewcontroller ()<UIPopoverPresentationControllerDelegate>
@end
-(void)viewDidLoad {
[super viewDidLoad];
//首先先创建一个背景色为绿色的button,想做到的效果是点击button右边出现一个pop的控制器大小为宽高200
UIButton*green=[[UIButton alloc]initWithFrame:CGRectMake(100,100, 100, 100)];
//设置背景色
green.backgroundColor=[UIColor greenColor];
//添加事件
[green addTarget:self action:@selector(button:)forControlEvents:UIControlEventTouchUpInside];
//将控件添加到main控制器的view上面
[self.view addSubview:green];
}
-(void)button:(UIButton*)green
{
//创建一个弹出的controller背景色为橙色
UIViewController*orange=[[UIViewController alloc]init];
//设置orange的莫泰弹出模式为pop
orange.modalPresentationStyle=UIModalPresentationPopover;
//设置orage的背景色为橙色
orange.view.backgroundColor=[UIColor orangeColor];
//设置orange的大小为长宽200
orange.preferredContentSize=CGSizeMake(200, 200);
//设置控制器pop的箭头在左边,这样控制器就在右边了
orange.popoverPresentationController.permittedArrowDirections= UIPopoverArrowDirectionLeft;
//设置pop基于控件的位置,因为如果箭头在上面那么默认位置就是控件下边的中线,所以这里用bounds就好
orange.popoverPresentationController.sourceRect=green.bounds;
//设置箭头在控制器的左边
orange.popoverPresentationController.permittedArrowDirections= UIPopoverArrowDirectionLeft;
//设置orange的位置是基于green的button的
orange.popoverPresentationController.sourceView=green;
//注意:实现以上方法后orange就可以在ipad上正常显示了,但是在iphone上还是一个全屏的莫泰
//这里需要用到UIPopoverPresentationController的代理方法 首先设置代理
//这里要注意一下之前把代理在后面设置也可以现在的版本貌似要在添加进去之前设置
orange.popoverPresentationController.delegate=self;
//将控制器以莫泰的方式出现
[self presentViewController:orange animated:YES completion:nil];
//以上代码也可以从控制器中取出UIPopoverPresentationController然后再设置UIPopoverPresentationController的属性,结果都是一样的
// UIPopoverPresentationController*pop=orange.popoverPresentationController;
// pop.permittedArrowDirections= UIPopoverArrowDirectionLeft;
// pop.sourceRect=CGRectMake(100,0, 100,100);
// pop.permittedArrowDirections= UIPopoverArrowDirectionLeft;
// pop.sourceView=self.view;
}
//实现代理方法
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController*)controller{
//返回UIModalPresentationNone为不匹配
return UIModalPresentationNone;}
这样在iPhone上也可以以pop的显示方式显示控制器了.喜欢的话记得dian ge zan