您的位置:首页 > 产品设计 > UI/UE

iOS8新特性(2)——UIPopoverController和UIPresentationController

2015-08-30 11:01 417 查看
一、以往使用 UIPopoverController

  都是只在iPad上使用

/**
*  UIPopoverController 只能用于iPad,上,iPhone上使用会崩溃
*/
-(void)old
{
VC2 *vc = [[VC2 alloc]init];

UIPopoverController *popover = [[UIPopoverController alloc]initWithContentViewController:vc];
[popover presentPopoverFromRect:self.btn.bounds inView:self.btn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}


二、统一的方式:

-(void)new
{
VC2 *vc = [[VC2 alloc]init];

//下面三行代码在iPhone中是会被忽略的
//但是在iPad中是将我们的present当作是present一个popover
//所以这是一种比较好的适配iPhone和iPad的共存方法
vc.modalPresentationStyle = UIModalPresentationPopover;
vc.popoverPresentationController.sourceRect = self.btn.bounds;
vc.popoverPresentationController.sourceView = self.btn;

[self presentViewController:vc animated:YES completion:nil];
}


- (void)viewDidLoad {
[super viewDidLoad];

ViewController2 *vc2 = [[ViewController2 alloc]init];

//vc2.modalPresentationStyle = UIModalPresentationFormSheet;//弹出在中间
vc2.modalPresentationStyle = UIModalPresentationPopover; //popover的形式弹出
vc2.popoverPresentationController.barButtonItem = self.navigationItem.leftBarButtonItem;

[self presentViewController:vc2 animated:YES completion:nil];

}


三、机制

1、只要一调用[self presentViewController:vc2 animated:YES completion:nil];

2、首先会生成一个UIPresentationController

3、然后由UIPresentationController管理控制器的切换

  4、无论设置UIModalPresentationFormSheet还是UIModalPresentationPopover模式,都是UIPresentationController来管理

四、一些重要的属性

  UIPresentationController *p;

  p.presentingViewController; //底部正在弹出的控制器(主)

  p.presentedViewController; //已经弹出来的控制器(被)

  p.presentedView; //已经被弹出来的控制器的view

vc2.presentationController; //控制“已经弹出来的控制器” 的控制器:就是 p或者p的自控制器 (只读,内部采用懒加载的方式,所以不要去改)

vc2.popoverPresentationController //如果设置style为popover出来的就同上,否则不设置style或者设置其他style就是nil
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: