一、简介
Popover样式就是点击某一个位置,视图将会以弹出的形式呈现出来。Popover仅覆盖部分屏幕,经常用于选定对象相关的项目列表。

在iPad开发中实现很容易,可以使用UIPopoverController。UIPopoverController是iPad开发中常见的一种控制器,而跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController。UIPopoverController作为iPad的一种特有元素,但不能用于iphone开发中。在ios8以前也只能自定义view实现了,然到了ios8,新出了一个UIPopoverPresentationController类可以方便的用来管理视图以Popover样式呈现,这不仅适应于iphone也适用于iPad,后来到了ios9 UIPopoverController直接被苹果废弃,完全用UIPopoverPresentationController代替。
二、UIPopoverPresentationController
NS_CLASS_AVAILABLE_IOS(8_0) @interface UIPopoverPresentationController
UIPopoverPresentationController是用来管理视图从弹出出现到现实的呈现行为的,我们可以用这个实例对象去设置popover的各个方面的外观和行为。
几乎所有的情况下,都不必自己去创造一个实例。因为当我们present(呈现/弹出)一个控制器使用popover样式的时候,UIKit会自动为我们创建一个这个类的实例。我们可以通过控制器的popoverpresentationcontroller属性来重新获取UIPopoverPresentationController的实例,并且使用它来设置我们的popover的行为。
PopViewController *vc=[[PopViewController alloc]init];
//设置弹出控制器的内容大小
vc.preferredContentSize = CGSizeMake(200, 200);
//设置弹出控制器的呈现方式是UIModalPresentationPopover
vc.modalPresentationStyle=UIModalPresentationPopover;
//1、获取一个UIPopoverPresentationController对象
UIPopoverPresentationController *poc = vc.popoverPresentationController;
//2、设置pover的外观和行为
//2.1弹出的位置源,也就是从哪个view上弹出
poc.sourceView=button;
//锚定popover的指定视图矩形。
poc.sourceRect=CGRectMake(30, 60, 0, 0);
/*箭头所指对应的区域.锚点的计算是这样的.首先根据sourceView. 在sourceView描绘出一块区域(CGRect),然后箭头指向这块区域的中心点.
//当你想点设置为barButtonItem所在的位置,你只需要设置 poc.barButtonItem = 你想的Item,系统会自动在barButtonItem的位置弹出
*/
//2.2 设置popover的箭头方向
poc.permittedArrowDirections= UIPopoverArrowDirectionUp;
/*
UIPopoverArrowDirectionUp = 1UL << 0,
UIPopoverArrowDirectionDown = 1UL << 1,
UIPopoverArrowDirectionLeft = 1UL << 2,
UIPopoverArrowDirectionRight = 1UL << 3,
UIPopoverArrowDirectionAny = UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown | UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionRight,
UIPopoverArrowDirectionUnknown = NSUIntegerMax
};
*/
poc.delegate=self;//<UIPopoverPresentationControllerDelegate>
//3、呈现
[self presentViewController:vc animated:YES completion:nil];
//实现该代理方法,返回UIModalPresentationNone值,可以在iPhone设备实现popover效果
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
return UIModalPresentationNone;
}
其它属性:
1、popoverBackgroundViewClass用于显示popover背景内容的类。
自定义的的背景类.用于替换弹出视图之后的背景.这个类必须继承 UIPopoverBackgroundView,且必须实现UIPopoverBackgroundViewMethods接口的方法.
2、popoverLayoutMargins定义允许显示弹出窗口屏幕部分的边距。
3、passthroughViews用户可以在弹出窗口可见时与之进行交互的视图数组。
网友评论