ios8中用于iphone的UIPopoverController显示白屏

Man*_*nan 6 iphone uipopovercontroller ios ios8

在iphone中使用ios8.0下的UIPopovercontroller可以正常使用这段代码.但在ios8中它显示白屏.

代码:

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];
Run Code Online (Sandbox Code Playgroud)

ios8的任何替代方案都需要建议.

ppa*_*ojr 11

根据2014年WWDC,在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];
}
Run Code Online (Sandbox Code Playgroud)

请注意,接受的答案有一些问题,例如:

  • 没有设置 modalPresentationStyle
  • 提出UIPopoverPresentationController *而不是UIViewController


小智 2

尝试使用新的 iOS 8 API 进行弹出窗口。

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];
Run Code Online (Sandbox Code Playgroud)

  • `[selfpresentViewController:popOverControlleranimated:YEScompletion:nil];` 给出警告:`不兼容的指针类型将 'UIPopoverPresentationController *' 发送到类型为 'UIViewController * _Nonnull' 的参数` (3认同)