UIPopoverController没有在iPad iOS 8中展示

8 ipad uipopovercontroller ios ios8

UIPopoverController在iOS 8 iPad中使用imagepicker.Its在iOS 7中工作但在iOS 8中没有.弹出窗口没有显示并popoverControllerDidDismissPopover立即调用.请建议一个解决方案..这里的代码使用:

UIPopoverController *popVC= [[UIPopoverController alloc] initWithContentViewController:pickerController];
_pop = popVC;
_pop.delegate = self;
[_pop presentPopoverFromRect:attachBtnFrame inView:_sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO];
Run Code Online (Sandbox Code Playgroud)

谢谢..

小智 22

终于找到了解决方案: 在主线程中显示Popover,如下所示.

if([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0)
{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
      [_pop presentPopoverFromRect:attachBtnFrame inView:_sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO];
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你不想延迟,你可以使用`dispatch_async`而不是`dispatch_after` (4认同)

Vat*_*kla 5

将此方法放在appDelegate.m中

+(BOOL)isIOS8

{
     NSString* version=[[UIDevice currentDevice] systemVersion];
    if ([version integerValue]>=8.0)
     {
         return YES;
     }
     else
     {
         return NO;
     } 
}
Run Code Online (Sandbox Code Playgroud)

现在,当你想使用PopoverController时,只需通过上面的方法检查系统OS

if([AppDelegate isIOS8])
Run Code Online (Sandbox Code Playgroud)

比使用这个方法

if([AppDelegate isIOS8])
        {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),
                 ^{[self.popover presentPopoverFromRect:popoverRect
                                              inView:self.view
                            permittedArrowDirections:UIPopoverArrowDirectionUp
                                            animated:YES];});
        }
        else
        {
            [self.popover presentPopoverFromRect:popoverRect
                                          inView:self.view
                        permittedArrowDirections:UIPopoverArrowDirectionAny
                                        animated:YES ];
        }
Run Code Online (Sandbox Code Playgroud)

这个方法非常适合我,它应该适合你...