Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios8中用于iphone的UIPopoverController显示白色屏幕_Ios_Iphone_Ios8_Uipopovercontroller - Fatal编程技术网

ios8中用于iphone的UIPopoverController显示白色屏幕

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

在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];

任何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”类型的参数。
是的,您是对的。这应该是公认的答案。