UIPopoverPresentationController是个什么?
我理解中的UIPopoverPresentationController是个弹出的控件,与UIAlertController类似,但又不同。UIPopoverPresentationController是iOS8以后新增的,是UIViewController的属性。使用的的时候,需要创建的是UIViewController。
先看一段代码:
UIViewController *functionListVC = [[UIViewController alloc] init];
functionListVC.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *pover = functionListVC.popoverPresentationController;
pover.delegate = self;
pover.sourceView = testButton;
pover.sourceRect = testButton.bounds;
pover.backgroundColor = [UIColor colorWithRed:63/255.0 green:66/255.0 blue:75/255.0 alpha:1.000];
pover.permittedArrowDirections = UIPopoverArrowDirectionAny;
[self presentViewController:functionListVC animated:YES completion:nil];
sourceView是指弹出时所参照的视图,与弹框的位置有关。
sourceRect是指弹出时参照视图的大小,与弹框的位置有关。
permittedArrowDirections是弹框的箭头方向。
delegate代理方法,需要导入UIPopoverPresentationControllerDelegate。
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
- (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
return NO;
}
- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
}
adaptivePresentationStyleForPresentationController默认返回的是覆盖整个屏幕,需设置成UIModalPresentationNone。
popoverPresentationControllerShouldDismissPopover设置点击蒙版是否消失,默认为YES。
popoverPresentationControllerDidDismissPopover弹出视图消失后调用的方法。
附上上述代码执行弹出视图:
显然,弹框的大小很多时候并不能满足我们的需要,UIPopoverPresentationController并不能通过改变frame的方式来改变大小。但我们知道,UIPopoverPresentationController是UIViewContriller的属性,我们可以通过UIViewContriller来改变。
在控制器里面重写方法,如下:
- (CGSize)preferredContentSize{
if (self.presentingViewController && self.myView != nil) {
CGSize size = CGSizeMake(50, 50);
return size;
}else {
return [super preferredContentSize];
}
}
- (void)setPreferredContentSize:(CGSize)preferredContentSize{
super.preferredContentSize = preferredContentSize;
}