ios8中用于iphone的UIPopoverController显示白色屏幕
在iphone中使用ios8.0以下的UIPopovercontroller可以很好地处理此代码。但在ios8中,它会显示白色屏幕 代码:ios8中用于iphone的UIPopoverController显示白色屏幕,ios,iphone,ios8,uipopovercontroller,Ios,Iphone,Ios8,Uipopovercontroller,在iphone中使用ios8.0以下的UIPopovercontroller可以很好地处理此代码。但在ios8中,它会显示白色屏幕 代码: pickerController = [[UIViewController alloc] init]; UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; [viewV setBackgroundColor:[UIColor clearColor]]; popO
pickerController = [[UIViewController alloc] init];
UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)];
[viewV setBackgroundColor:[UIColor clearColor]];
popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController];
popOverController.popoverContentSize = CGSizeMake(150, 160);
[popOverController setDelegate:self];
CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view];
[popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
任何ios8的替代方案都需要建议。尝试将新的ios8 API用于Popover
pickerController = [[UIViewController alloc] init];
UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)];
[viewV setBackgroundColor:[UIColor clearColor]];
UIPopoverPresentationController *popOverController = pickerController .popoverPresentationController;
popOverController.popoverContentSize = CGSizeMake(150, 160);
[popOverController setDelegate:self];
popOverController.sourceView = self.view;
popOverController.sourceRect = sender.frame;
popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:popOverController
animated:YES
completion:nil];
这将在iOS 8上导致。所以,我建议使用以下Github库。 或者您可以基于iOS版本编写代码
if (OLDER_THAN_IOS_8) {
// Your regular code
pickerController = [[UIViewController alloc] init];
UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)];
[viewV setBackgroundColor:[UIColor clearColor]];
popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController];
popOverController.popoverContentSize = CGSizeMake(150, 160);
[popOverController setDelegate:self];
CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view];
[popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
} else {
// New Code that support iOS -8 using UIPopoverPresentationController
// Checkout @AndreasZ answer for the same
}
根据调查,在30分钟内,正确答案是:
- (void) tapButton:(id) sender
{
MyViewControllerClass * vc = [[MyViewControllerClass alloc] init];
vc.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController * popOverController = vc.popoverPresentationController;
[popOverController setDelegate:self];
popOverController.sourceView = sender;
popOverController.sourceRect = ((UIButton*)sender).frame;
popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp;
[self presentViewController:vc
animated:YES
completion:nil];
}
请注意,已接受的答案存在以下问题:
- 未设置
modalPresentationStyle
- 显示
而不是UIPopoverPresentationController*
UIViewController
[自我呈现视图控制器:popOverController动画:是完成:无]
给出警告:不兼容的指针类型将“UIPopoverPresentationController*”发送到“UIViewController*\u Nonnull”类型的参数。
是的,您是对的。这应该是公认的答案。