iPad iOS 8中UIPopoverController无法呈现

8

我在iOS 8 iPad中使用UIPopoverController来进行imagepicker。虽然在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];

Thanks..

2个回答

22

终于找到解决方案: 在主线程中呈现弹出窗口,如下所示。

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];
    });
}

4
如果你不想要延迟,可以使用 dispatch_async 而不是 dispatch_after - Bastian
这对我不起作用。在iOS 8.1.1中它仍然有效吗? - zezba9000
@zezba9000 是的。8.1.1无需更改。 - user4034301
感谢您的解决方案...在花费了很多小时后,我以这种方式解决了问题。 - Prajnaranjan Das

5
将此方法放入您的appDelegate.m文件中。
+(BOOL)isIOS8

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

现在,当您想使用PopoverController时,请通过上述方法检查系统操作系统

if([AppDelegate isIOS8])

请使用这种方法。
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 ];
        }

这种方法对我非常有效,应该也适用于你...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接